【问题标题】:Cannot add dynamic child arraylist to header arraylist expandablelistview android?无法将动态子数组列表添加到标题数组列表 expandablelistview android?
【发布时间】:2017-11-22 13:20:36
【问题描述】:
    private ArrayList<String> listDataHeader;
private HashMap<String, List<String>> listDataChild;

ExpandableListAdapter listAdapter;
ExpandableListView expListView;
private int i,j,k;
List<String> addChild=new ArrayList<String>();
private List<Guide> guideList=new ArrayList<>();

在 onCreate 我已经完成了

expListView=(ExpandableListView)findViewById(R.id.expandableListView);

prepareDataList();

listAdapter=new MyExpandableListAdapter(this,listDataHeader,listDataChild);

    expListView.setAdapter(listAdapter);
}

这里是 prepareDataList() 方法 - 这是准备好的列表数据,我在其中获取类别和子项目数据

   private void prepareDataList() {
   listDataHeader = new ArrayList<String>();
   listDataChild = new HashMap<String, List<String>>();

这是从响应中获取类别数据的改造

Retrofit retrofit = apiClient.getClient();
 apiRest service = retrofit.create(apiRest.class);
Call<List<Category>> call = service.categorriesList();
  call.enqueue(new Callback<List<Category>>() {

        @Override
        public void onResponse(@NonNull Call<List<Category>> call, @NonNull 
final Response<List<Category>> response) {
            if (response.isSuccessful()){
                for (i=0;i<response.body().size();i++){

这里我将响应类别标题数据添加到 listDataHeader 此外,我创建了下一个改造响应,以通过 response.body().get(i).getId.toString() 从类别 id 获取项目列表;

                    listDataHeader.add(response.body().get(i).getTitle());

     Retrofit retrofit1 = apiClient.getClient();
     apiRest service1 = retrofit1.create(apiRest.class);
                    Call<List<Guide>> call1 = 
service1.guidesByCategory(response.body().get(i).getId().toString());
                    call1.enqueue(new Callback<List<Guide>>() {
                        @Override
                        public void onResponse(@NonNull Call<List<Guide>> 
call1, @NonNull Response<List<Guide>> response1) {
                            if (response1.isSuccessful()){
                                if (response1.body().size()!=0){
                                    for (j=0;j<response1.body().size();j++){


guideList.add(response1.body().get(j));

addChild.add(guideList.get(j).getTitle());

                                    }



                                }

                            }
                        }
               @Override
               public void onFailure(Call<List<Guide>> call1, Throwable t) {
                        }
                    });



     listDataChild.put(listDataHeader.get
     (listDataHeader.size()-1),addChild);
                    addChild.clear();
                    listDataHeader.clear();

  Log.e("PARENT_AND_CHILD","PARENT IS ="+(listDataHeader.size()-1)+" AND 
  CHILD IS ="+addChild);
                }


             }
        }
        @Override
        public void onFailure(Call<List<Category>> call, Throwable t) {
        }
    });

}

这是我创建的适配器

 package com.stackheaps.how_to.adapter;


 public class MyExpandableListAdapter 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 MyExpandableListAdapter(Context context, List<String> listDataHeader,
                             HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}


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

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

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

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

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

@Override
public long getChildId(int i, int i1) {
    return i1;
}

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

@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
    String headerTitle=(String)getGroup(i);
    if(view==null){
        LayoutInflater layoutInflater=(LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=layoutInflater.inflate(R.layout.list_group,null);
    }

    TextView txtHeader=(TextView)view.findViewById(R.id.listTitle);
    txtHeader.setTypeface(null, Typeface.BOLD);
    txtHeader.setText(headerTitle);

    return view;
}

@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
    final String childText=(String)getChild(i,i1);

    if(view==null){
        LayoutInflater layoutInflater=(LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=layoutInflater.inflate(R.layout.list_item,null);
    }

    TextView txtChild=(TextView)view.findViewById(R.id.expandedListItem);
    txtChild.setText(childText);
    return view;
}

@Override
public boolean isChildSelectable(int i, int i1) {
    return false;
  }

}

【问题讨论】:

标签: android arraylist retrofit expandablelistview


【解决方案1】:

删除这一行

listDataHeader.clear();

每次你清除 listDataHeader 中的数据,所以它只在索引 0 处保存一个数据。第一次你的 for 循环 i = 0,所以它可以正确执行。

备用

改变这一行

listDataChild.put(listDataHeader.get(i),addChild);

listDataChild.put(listDataHeader.get(0),addChild); //0 as index  

所以每次从索引 0 获取数据。

【讨论】:

  • 您是否尝试删除此行 listDataHeader.clear(); -- 更新您的响应数据。
  • 是的。我现在正在获取类别,但现在项目列表 r 为空。与以前相同的输出
  • E/CATEGORY LIST: CAREGORY ARE [C Programming] AND ID IS 12 E/GUIDE LIST For Category: [C Programming] 有 GUIDE ARE [] E/CATEGORY LIST: CAREGORY ARE [C Programming, C++] AND ID IS 13 E/GUIDE LIST For Category: [C Programming, C++] Have GUIDE ARE [] i have check in logcat guide未按类别ID给出项目
  • 您的意思是您无法根据类别 ID 获取商品。
  • 我在另一个活动中使用了相同的 guidesByCategory 方法,那里的输出来了,但是在这里检索时它没有来。
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 2018-08-28
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多