2017-04-07 13 views
0

私はグループ項目と私が得たデータから生成された子項目でExpandableListViewを使用しています。これで、生成された各グループの一番下にボタンが必要です。このボタンは、ボタンがどのグループに属しているかを知る関数を呼び出すonClickListenerで呼び出されます。ExpandableListView内の各グループにボタンを追加する

サンプルデータタイトル -header上のボタンが追加されます私のlist_group.xmlレイアウトファイルにそれを追加し、一つ一つのサンプル・データ -TextView要素に追加します私のlist_item.xmlに追加。

これはAndroid Studioを使用した私の最初のプロジェクトであり、問​​題を解決しようとしています。ここで

は私がボタン項目があるボタンを追加しようとしているhow the list looks like
のスクリーンショットです。

これは、データとのリストを埋めるために私の関数である:

private void prepareListData(ccyPair[] ccyPairs) { 
      listDataHeader = new ArrayList<String>(); 
      listDataChild = new HashMap<String, List<String>>(); 
      int counter = 0; 
      // Adding child data 
      for (ccyPair p : ccyPairs){ 
       listDataHeader.add("Sample Data Title"); 
       List<String> tempExpInfo = new ArrayList<String>(); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("Sample data"); 
       tempExpInfo.add("BUTTON"); 
       listDataChild.put(listDataHeader.get(counter), tempExpInfo); 
       counter++; 
      } 
     } 

list_group.xmlファイル:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="8dp" 
    android:background="@color/colorExpandableList"> 


    <TextView 
     android:id="@+id/lblListHeader" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
     android:textSize="17dp" 
     android:paddingTop="10dp" 
     android:paddingBottom="10dp" 
     android:background="@color/colorExpandableList" 
     android:textColor="#2282c1" 
     android:layout_alignParentTop="true"/> 

</RelativeLayout> 

list_item.xmlファイル:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorExpandableList"><![CDATA[ 
    android:orientation="vertical" > 



    ]]> 

    <TextView 
     android:id="@+id/lblListItem" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorExpandableList" 
     android:paddingBottom="5dp" 
     android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" 
     android:paddingTop="5dp" 
     android:textSize="17dip" /> 


</LinearLayout> 

そしてExpandableListAdapter

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<String> _listDataHeader; // header titles 
    // child data in format of header title, child title 
    private HashMap<String, List<String>> _listDataChild; 

    public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosititon); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    @Override 
    public View getChildView(int groupPosition, final int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 

     final String childText = (String) getChild(groupPosition, childPosition); 

     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_item, null); 
     } 

     TextView txtListChild = (TextView) convertView 
       .findViewById(R.id.lblListItem); 

     txtListChild.setText(childText); 
     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return this._listDataHeader.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return this._listDataHeader.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater infalInflater = (LayoutInflater) this._context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = infalInflater.inflate(R.layout.list_group, null); 
     } 

     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setText(headerTitle); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 

答えて

1

getChildView()メソッドあなたが

最初のオプションを見たいところです:getChildView()メソッドで

ますどの争いを区別する必要があるあなたは膨らみたい。あなたがボタンコンポーネントが含まれているlist_item_with_button.xmlを作成する最後の子のために

if(isLastChild){ 
    convertView = Inflater.inflate(R.layout.list_item_with_button, null); 
} else { 
    convertView = Inflater.inflate(R.layout.list_item, null); 
} 

。次に、isLastChildブール値フラグをチェックして、この新しいレイアウトを展開してボタンを最後の位置に移動させることができます。

番目のオプション:既存list_item.xmlを編集して

View button = convertView.findViewById(R.id.myButton); 
if(isLastChild){ 
    v.setVisibility(View.VISIBLE); 
} else { 
    v.setVisibility(View.GONE); 
} 
+0

おかげで最後の位置にあなたが表示され、それにボタンを追加することができます!最初のオプションはうまくいっただけでなく、たくさん混乱しました。しかし、2番目のオプションは問題なく仕事をします! – Luanhu

関連する問題