亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 ExpandableListView 中制作兩個或三個文本視圖?

如何在 ExpandableListView 中制作兩個或三個文本視圖?

心有法竹 2023-09-20 17:26:10
我正在為 android 創建一個程序,在應用程序中,我使用 ExpandableListview 和 BaseExpandableListViewAdapter,默認情況下此適配器使用一個 TextView,我想在子 listItem 上創建一些(兩個或三個)TextView,請幫助我編寫代碼,該怎么辦寫在活動中?XML 布局列表項子文件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical" >    <androidx.cardview.widget.CardView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="5dp">        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_margin="5dp"            android:orientation="vertical">        <TextView            android:id="@+id/lblListItem"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:paddingLeft="10dp"            android:paddingTop="3dp"            android:paddingBottom="3dp"            android:textSize="15dip" />        <TextView            android:id="@+id/lblListItem2"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:paddingLeft="10dp"            android:paddingTop="3dp"            android:paddingBottom="3dp"            android:textSize="15dip" />        </LinearLayout>    </androidx.cardview.widget.CardView></LinearLayout>來自適配器的一些代碼:@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);        }
查看完整描述

1 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

最簡單的方法是讓適配器占用更多列表。


因此,像這樣準備 datalists 和 setAdapter:


private ExpandableListAdapter listAdapter;

private ExpandableListView expListView;

private List<String> listDataHeader;

private HashMap<String, List<String>> listDataChild1, listDataChild2;


@Nullable

@Override

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View cpf = inflater.inflate(R.layout.checklist_bstart, container, false);

    expListView = cpf.findViewById(R.id.lv_bstart);

    prepareListData();

    listAdapter = new ExpandableListAdapter(getActivity(), listDataHeader, listDataChild1, listDataChild2);

    expListView.setAdapter(listAdapter);

    return cpf;

}


private void prepareListData() {

    listDataHeader = new ArrayList<>();

    listDataChild1 = new HashMap<>();

    listDataHeader.add(getResources().getString(R.string.bstart_ver));

    listDataHeader.add(getResources().getString(R.string.bstart_op));

    List<String> Header1 = new ArrayList<>();

    Header1.add(getResources().getString(R.string.bstart_string1));

    Header1.add(getResources().getString(R.string.bstart_string2));

    Header1.add(getResources().getString(R.string.bstart_string3));

    List<String> Header12 = new ArrayList<>();

    Header12.add(getResources().getString(R.string.bstart_string4));

    Header12.add(getResources().getString(R.string.bstart_string5));

    Header12.add(getResources().getString(R.string.bstart_string6));


    List<String> Header2 = new ArrayList<>();

    Header2.add(getResources().getString(R.string.bstart_string4));

    Header2.add(getResources().getString(R.string.bstart_string5));

    Header2.add(getResources().getString(R.string.bstart_string6));

    Header2.add(getResources().getString(R.string.bstart_string7));

    Header2.add(getResources().getString(R.string.bstart_string8));

    List<String> Header22 = new ArrayList<>();

    Header22.add(getResources().getString(R.string.bstart_string1));

    Header22.add(getResources().getString(R.string.bstart_string2));

    Header22.add(getResources().getString(R.string.bstart_string3));

    Header22.add(getResources().getString(R.string.bstart_string7));

    Header22.add(getResources().getString(R.string.bstart_string8));


    listDataChild1.put(listDataHeader.get(0), Header1);

    listDataChild1.put(listDataHeader.get(1), Header2);

    listDataChild2.put(listDataHeader.get(0), Header1);

    listDataChild2.put(listDataHeader.get(1), Header2);

}

并像這樣修改適配器構造函數和 getChildView :


Context _context;

List<String> listDataHeader;

HashMap<String, List<String>> listDataChild1, listDataChild2;


public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listDataChild1,

                             HashMap<String, List<String>> listDataChild2) {

    _context = context;

    this.listDataHeader = listDataHeader;

    this.listDataChild1 = listDataChild1;

    this.listDataChild2 = listDataChild2;

}


@Override

public View getChildView(int groupPosition, int childPosition, boolean b, View convertView, ViewGroup viewGroup) {

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

    String childText2 = listDataChild2.get(getGroup(groupPosition)).get(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);

    TextView txtListChild2 = (TextView) convertView.findViewById(R.id.lblListItem2);

    txtListChild2.setText(childText2);

    return convertView;

}

您可以執行類似的操作來制作第三個列表。要記住的一件非常重要的事情是,第二個/第三個列表的大小決不能小于主列表,否則會導致 INDEX_OUT_OF_BOUND 錯誤 [listDataChild2.get(getGroup(groupPosition)).get(childPosition) 其中 childPosition 的邊界為主列表的大小]。


對于我在上面評論中提到的鏈接,使用 POJO 類而不是 List 和 HashMap。這可能是一個更好的方法。


希望有幫助!


查看完整回答
反對 回復 2023-09-20
  • 1 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號