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;
}
});
}
}
이 줄의 용도 : Tasks.Status status [] = Tasks.Status.values (); . 제게 해결책을주세요. –
내 expandablelistview의 체크 박스와 비슷한 문제가 있습니다. 값을 저장하는 방법을 알아 냈지만 변덕스러운 확인란의 복잡성으로 인해 프로젝트의 expandablelistview에서 앞으로 나아갈 수 없었습니다. 코드를 게시하거나 답변을 얻으십시오. 솔루션에 어떻게 접근했는지 알고 싶습니다. – AlleyOOP