0

私はアンドロイドが初めてで、下の画像のような ListView を実装したいと考えていますExpandableListView。expandableListView は私の要求を満たすかもしれませんが、私が望むのはItem 4子だけで展開できることです。「項目 1」はユーザーがクリックできるオプションであり、展開することはできません。Expandable List View のドキュメントを読みましたが、これを実装する方法が十分に明確ではありません。誰かがこれを実装することについて何か提案できますか? どうもありがとう

4

3 に答える 3

1

しかし、私が欲しいのは、アイテム4だけが子を持ち、展開できることです

Item に子がない場合、展開されません。次のようにイメージできます。

public class Item {

   private String title;
   private List<Option> children; // if size = 0 won't be expanded
}

これはネイティブの動作であるExpandableListViewため、アイテムに子がない場合、暗黙的に展開されませんが、グループ (アイテム) と子 (オプション) の両方に OnClickListener を設定する必要があります。

public boolean onChildClick(ExpandableListView parent, View row, 
                           int groupPosition, int childPosition, long id) {

   // callback method after click for Options
   return false;
}


public boolean onGroupClick(ExpandableListView parent, View row, 
                             int groupPosition, long id) {

   /** if you are using BaseAdapter subclass implementation **/

   adapter.getGroup(groupPosition)).getChildren() == null) {
      // item doesn't have children
   }
   else {
      // has children
   }

一般に、ListView をより詳細に制御したい場合は、 BaseExpandableListAdapter を使用できる場合に ListAdapter の独自のサブクラスを実装することをお勧めします

また、リストの外観は、適切なスタイルのレイアウトに関する問題のみです。たとえば、グループ インジケーターを削除する

android:groupIndicator="@null"

アップデート:

@Roberto Lombardini が言及した問題:

このソリューションの小さな問題は、グループに子がなくても、グループ ビューの状態 (展開されているかどうか) を示す小さな灰色の三角形が表示されることです。私が間違っている?

子を持つアイテムにのみ灰色の三角形を使用したい場合は、getGroupView()メソッドのカスタム アダプターで修正する必要があります。

public View getGroupView(int groupPosition, boolean isExpanded, 
                         View convertView, ViewGroup parent) {

   // inflating View etc.

   Item item = items.get(groupPosition);
   if (item != null) {

      // if Item has children
      if (item.getChildren() != null && !item.getChildren().isEmpty()) {

         // set children indicator to VISIBLE
         imageView.setVisibility(ImageView.VISIBLE);
      }
      // if Item doesn't have children
      else {
         // set children indicator to GONE
         imageView.setVisibility(ImageView.GONE);
      }
   }
}
于 2013-09-13T07:26:45.443 に答える
0
 lv.setOnGroupClickListener(new OnGroupClickListener() {
     public boolean onGroupClick(ExpandableListView parent, View v, int position, long id) {
         switch (position) {
             case 0: return true;
             case 2: return true; // returning true wont expand 
             default:
                 return false;// if you return false then only that position will be expanded
             }
         }
     }
); 

展開したい親の位置と展開したくない親の位置で false を返すだけで、true を返すことができます。

于 2014-12-24T09:45:37.787 に答える
0

カスタムアダプターを実装してみてください。必要なことを行うためのより良い方法になると思います

于 2013-09-13T07:27:57.417 に答える