- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑
我找到了解决方案,请看下面。
原创:
我创建了一个 ExpandableListView
,它看起来像这样:
每个组 View 有3~5个 subview ,我强制展开所有组 View ,
mExpandableListView = (ExpandableListView) mView.findViewById(R.id.expandable_list);
CollectionExpandableListAdapter adapter = new MyExpandableListAdapter(getActivity(), mGroups, mProdChild);
adapter.setInflater(LayoutInflater.from(getActivity().getBaseContext()), getActivity());
mExpandableListView.setAdapter(adapter);
mExpandableListView.setGroupIndicator(null);
for (int i = 0; i < groupList.size() - 1; i++) {
mExpandableListView.expandGroup(i);
}
此外,这是我的适配器代码:
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private ArrayList<String> mGroupItem;
private ArrayList<ProductListData> mTempChild = new ArrayList<ProductListData>();
private ArrayList<Object> mChildItem = new ArrayList<Object>();
private LayoutInflater mInflater;
private Activity mActivity;
private ImageLoader mImageLoader;
public CollectionExpandableListAdapter(Activity context, ArrayList<String> grList,
ArrayList<Object> childItem) {
mGroupItem = grList;
mChildItem = childItem;
mActivity = context;
mImageLoader = new ImageLoader(mActivity);
}
public void setInflater(LayoutInflater inflater, Activity activity) {
mInflater = inflater;
mActivity = activity;
}
@Override
public ProductListData getChild(int groupPosition, int childPosition) {
return ((ArrayList<ProductListData>) mChildItem.get(groupPosition)).get(childPosition);
}
@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) {
mTempChild = (ArrayList<ProductListData>) mChildItem.get(groupPosition);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.adapter_collection_row_child, null);
}
...
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return ((ArrayList<ProductListData>) mChildItem.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mGroupItem.get(groupPosition);
}
@Override
public int getGroupCount() {
return mGroupItem.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup arg3) {
Log.d("LOG", "Group position : " + groupPosition);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.group_row_layout, null);
}
...
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return false;
}
@Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
}
创建一个 expandableListView 工作正常,但当我滚动列表时,我在 getGroupView()
中得到的值一直为 0。在我的 logcat 中,我希望看到 groupPosition
为 0, 1, 2, 3, 4..
(当我向下滚动时),但它实际上显示了 0, 0, 0, 1, 0, 2, 0, 3, 0, 4..
在每个 groupPosition
之前有额外的 0
。这只发生在第一次滚动时,所以如果我上下滚动几次,它不会显示额外的 0 值。
我用谷歌搜索并花了很多时间调试它,但我找不到任何解决方案。谁能帮帮我?
解决方案
我的问题出在 Listview
的布局中。我将 layout_height
更改为 match_parent
,错误消失了!我找到了解决方案 here .
最佳答案
我曾经遇到过类似的问题,得到了错误的观点。不确定这里是否是这种情况,但我所做的是评论/删除该行:
if (convertView == null) {
在 listadapter 的 getGroupView 方法和 getChildView 方法中。
和 ofc 相应的结束大括号。
这与列表适配器重用 View 有关,以便在显示 View 时使用较少的系统资源,但它使管理 imo 变得更加困难。
关于android - ExpandableListView 中的 groupPosition 给了我错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399351/
编辑 我找到了解决方案,请看下面。 原创: 我创建了一个 ExpandableListView,它看起来像这样: 第 0 组 - child 0、 child 1、 child 2 第 1 组 - c
我有一个 ExpandableListView;列表的单个项目(组项目)有一个包含 ToggleButton 的 FrameLayout。我这样做是为了增加按钮的触摸区域。我使用按钮展开它所属的组项的
我有一个虚拟 JSON 数据,它有一个大小为 8 的 ArrayList。它们必须填充在 expandableListView 中,但它只显示第一组。因为当我调试它时,getGroupView 总是在
我遇到了一个我已经处理了一段时间的问题。我正在使用带有 ViewHolder 的 ExpandableListView。我知道 ExpandableListView 重用了 View ,我认为这就是我
我是一名优秀的程序员,十分优秀!