gpt4 book ai didi

android - ExpandableListView 和复选框

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:16 25 4
gpt4 key购买 nike

我正在 Android 中编写简单的过滤器,并希望将 ExpandableListAdapter 与复选框一起使用。

我对创建列表或选中复选框没有任何问题。但我真的不知道如何记住选择。关闭组并再次打开后,或者当我尝试打开不同的组时,复选框会发生变化。

我尝试在网上阅读相关内容,但没有找到解决问题的方法。

这是我的代码:

public class TasksFilterDialog extends Dialog{

private static final String TAG = "Filter Dialog";
private static final String ChildID = "ChildID";
private static final String GroupID = "GroupID";

private boolean[] statusCheck;

ExpandableListView list;
SimpleExpandableListAdapter listAdapter;

public TasksFilterDialog(Context context) {
super(context);
statusCheck = new boolean[Tasks.Status.values().length];
for(int i=0; i<statusCheck.length; i++)
statusCheck[i]=true;
}


@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "Creating dialog");
this.setContentView(R.layout.tasks_filter);
list = (ExpandableListView)findViewById(R.id.filter_list);
setListAdapter(); // Setting Adapter Values to use on list
list.setAdapter(listAdapter); // Setting creating adapter to list
setOnChildClickListeners();


Log.d(TAG, "Creating dialog successfull");
}


private void setListAdapter() {
Log.d(TAG, "Setting list adapter");
listAdapter = new SimpleExpandableListAdapter(this.getContext(),
getGroups(),
R.layout.tasks_filter_groups_layout,
new String[] {GroupID},
new int[] {R.id.filter_group_text},
getChilds(),
R.layout.tasks_filter_simple_element,
new String[] {ChildID},
new int[] {R.id.filter_simple_element_text});

Log.d(TAG, "Setting list adapter successfull");
}

private List<HashMap<String, String>> getGroups() {
Log.d(TAG, "Adding groups values");
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String, String> statusMap = new HashMap<String, String>();
statusMap.put(GroupID, "Status");
list.add(statusMap);
HashMap<String, String> usersMap = new HashMap<String, String>();
usersMap.put(GroupID, "Users");
list.add(usersMap);
Log.d(TAG, "Adding groups values successfull");
return list;
}

private List<List<HashMap<String, String>>> getChilds() {
Log.d(TAG, "Adding childs values");
List<List<HashMap<String, String>>> list = new ArrayList<List<HashMap<String, String>>>();
List<HashMap<String, String>> secList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
Tasks.Status status[] = Tasks.Status.values();
for(int i=0; i<status.length; i++) {
Log.d(TAG, "Adding child" + status[i].toString());
map = new HashMap<String, String>();
map.put(ChildID, status[i].toString());
secList.add(map);
}
list.add(secList);
list.add(secList);
Log.d(TAG, "Adding childs values succesfull");
return list;
}

private void setOnChildClickListeners() {
list.setOnChildClickListener(new OnChildClickListener() {

@Override
public boolean onChildClick(ExpandableListView list, View v,
int group, int id, long arg4) {
CheckBox cb = (CheckBox) v.findViewById(R.id.filter_simple_element_check);
cb.toggle();
switch(group){
case 0:
if(statusCheck[id])
statusCheck[id]=false;
else
statusCheck[id]=true;
break;
case 1:
//TODO After getting Tasks function

}
return false;
}

});

}

最佳答案

这取决于您想要设计它的程度。 Map> 会起作用。 map 占据一个位置并为您提供一组选中的子项。要确定 child 是否被选中,请在组上调用 Map.get(),然后查看集合是否包含 child 的 ID。

如果你想查看第三组的第二个 child 是否被选中,你可以这样做:

boolean isChecked = yourMap.get(3).contains(2);

要设置 child 选中:

yourMap.get(groupNum).add(childNum);

设置未选中的 child :

yourMap.get(groupNum).remove(childNum);

您需要初始化 map 以包含每个组的空集以避免 NPE,但这在您首次创建 map 时很容易做到。我相信你可以想出一个更简洁的方法来做到这一点,但它很简单而且会起作用。

关于android - ExpandableListView 和复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com