2012-03-21 14 views
5

मैं Android में सरल फिल्टर लिख रहा हूँ और चेक बॉक्स के साथ ExpandableListAdapter उपयोग करना चाहते हैं।ExpandableListView और चेक बॉक्स

मैं सूची बनाने या चेकबॉक्स जाँच के साथ कोई समस्या नहीं है। लेकिन मैं वास्तव में नहीं जानता कि विकल्पों को कैसे याद रखें। समूह को बंद करने और फिर से खोलने के बाद या जब मैं अलग-अलग समूह खोलने का प्रयास करता हूं चेकबॉक्स बदलते हैं।

मुझे लगता है कि के बारे में नेट पर पढ़ने की कोशिश की लेकिन मैं कैसे मेरी समस्या हल करने के लिए लगता है didn `t।

यहाँ मेरी कोड है:

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; 
     } 

    }); 

} 

}

+0

इस लाइन के लिए क्या उद्देश्य: Tasks.Status स्थिति [] = Tasks.Status.values ​​(); मुझे समाधान दे कृपया –

+0

मैं अपने expandablelistview में चेक बॉक्स के साथ एक समान समस्या आ रही है। मैंने मूल्यों को बचाने के लिए एक तरीका निकाला है, लेकिन चेकबॉक्स के साथ जटिलताओं ने मुझे अपनी परियोजना में विस्तार योग्य सूचीदृश्य से आगे बढ़ने से रोक दिया है। कृपया कोड पोस्ट करें या संपर्क में रहने का जवाब दें, क्योंकि मुझे यह देखने में बहुत दिलचस्पी है कि आपने समाधान के साथ कैसे संपर्क किया। – AlleyOOP

उत्तर

2

यह आप कितना यह इंजीनियर करना चाहते हैं पर निर्भर करता है। एक मानचित्र> काम करेगा। नक्शा एक स्थिति लेता है और आपको चेक किए गए बच्चों का एक सेट देता है। यदि एक बच्चा चेक किया गया है का निर्धारण या नहीं करने के लिए, समूह पर Map.get() कहते हैं, और फिर देखें कि वह सेट बच्चे की आईडी में शामिल है।

आप अगर तीसरे समूह के दूसरे बच्चे को चेक किया गया देखना चाहते हैं, तो आप कर सकता है:

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

एक बच्चे की जाँच करने के लिए:

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

एक बच्चे अनियंत्रित सेट करने के लिए:

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

आपको एनपीई से बचने के लिए प्रत्येक समूह के लिए खाली सेट रखने के लिए मानचित्र को प्रारंभ करना होगा, लेकिन वह जब आप पहली बार नक्शा बनाते हैं तो करना आसान होता है। मुझे यकीन है कि आप ऐसा करने के लिए एक क्लीनर तरीके से आ सकते हैं, लेकिन यह आसान है और यह काम करेगा।

संबंधित मुद्दे