पहले एक छोटी सिंहावलोकन मेरी कोड के, मैं आशा है कि अपनी समझ में आता है:अद्यतन कर रहा है ExpandableListView()
- मैं एक वर्ग में कुछ चर के साथ
ToDoElement
कहा जाता है। - मेरे पास
ToDoListe
नामक एक और वर्ग है जो एक ArrayList मेंToDoElement
एस प्रबंधित करता है। ToDoListe
विधिdeleteElement()
अपने मुख्य गतिविधि में- ArrayList से एक
ToDoElement
नष्ट करने के लिए होता हैliste_activity
मैंToDoListe
की एक वस्तु बना सकते हैं औरToDoElement
में से कुछ वस्तुओं के साथ भरें। - उसी गतिविधि में मेरे पास अपने स्वयं के एडाप्टर के साथ एक विस्तारणीय लिस्ट व्यू है जिसे
expListAdapter
कहा जाता है। - एडाप्टर
ToDoElement
एस के स्ट्रिंग चर प्राप्त करके ग्रुपव्यू और चाइल्डव्यूज़ बनाता है। - मैंने सूची के प्रत्येक समूह आइटम के लिए एक कॉन्टेक्स्टमेनू बनाया, जिसमें मैं
deleteElement()
विधि का उपयोग करता हूं।
मैं विधिdeleteElement()
मैं अपने सूची को अपडेट करना चाहते इस्तेमाल किया के बाद, क्योंकिToDoListe
में ArrayList के डेटा बदल:
ठीक है, अब यहाँ मेरी समस्या है। तो मैं expListAdapter.notifyDataSetChanged()
पर कॉल करता हूं।
लेकिन फिर मेरी पूरी गतिविधि दुर्घटनाग्रस्त हो जाती है: "इंडेक्सऑटऑफबाउंड अपवाद: अमान्य अनुक्रमणिका 4, आकार 4" (मेरे पास 5 में सेआइटम मेरी सूची में था, उनमें से एक को हटाने से पहले)।
मुझे पता है कि मेरे लिए एक लूप के कारण है, लेकिन मुझे कोई विचार नहीं है कि क्यों।
कोड टुकड़े:
ToDoListe की नई वस्तु बनाने:
private static ToDoListe Liste = new ToDoListe();
वर्ग ToDoListe (सिर्फ महत्वपूर्ण तरीकों):
public class ToDoListe {
private ArrayList<ToDoElement> ToDoListe;
public ToDoListe()
{
ToDoListe = new ArrayList<ToDoElement>();
}
public void newElement(ToDoElement element){
ToDoListe.add(element);
}
public void deleteElement(int nummer) {
ToDoListe.remove(nummer);
}
public int AnzahlElemente() {
return ToDoListe.size();
}
}
सूची एडाप्टर को परिभाषित:
expListAdapter = new MyListAdapter(this, createGroupList(), createChildList());
setListAdapter(expListAdapter);
सूची एडाप्टर के लिए ArrayLists बनाएँ:
// creates the list with the group items
private List createGroupList() {
ArrayList result = new ArrayList();
for (int i=0; i < Liste.AnzahlElemente(); i++) {
result.add(Liste.getElement(i).getUeberschrift());
}
return result;
}
// creates the list with the child items
private List createChildList() {
ArrayList result = new ArrayList();
for(int i=0; i < Liste.AnzahlElemente(); i++) {
ArrayList secList = new ArrayList();
for(int n = 1 ; n <= 3 ; n++) {
if (Liste.getElement(i).getStichpunkt(n).length() != 0){
secList.add("- " + Liste.getElement(i).getStichpunkt(n));
}
}
result.add(secList);
}
return result;
}
अपने ही सूची एडाप्टर (सिर्फ महत्वपूर्ण तरीकों):
public class MyListAdapter extends BaseExpandableListAdapter{
private ArrayList<String> ueberschriften;
private ArrayList<ArrayList<String>> stichpunkte;
private LayoutInflater inflater;
public MyListAdapter(Context context, List _ueberschriften, List _stichpunkte) {
this.ueberschriften = (ArrayList)_ueberschriften;
this.stichpunkte = (ArrayList)_stichpunkte;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_child, null);
}
TextView tv = (TextView) convertView.findViewById(R.id.item_child_title);
tv.setText(liste_activity.getListe().getElement(groupPosition).getStichpunkt(childPosition));
return convertView;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_group, null);
}
TextView tv = (TextView)convertView.findViewById(R.id.item_group_title);
tv.setText(liste_activity.getListe().getElement(groupPosition).getUeberschrift());
return convertView;
}
notifyDataSetChanged() के उपयोग:
Liste.deleteElement(groupPos);
expListAdapter.notifyDataSetChanged();
आपके ध्यान के लिए बहुत बहुत धन्यवाद !!
अच्छा लगता है! क्या आप मुझे एक उदाहरण दे सकते हैं, क्योंकि मुझे नहीं पता कि एडाप्टर आइटम के लिए डिलीट विधि कैसे लिखना है ..? – OnClickListener
ठीक है, मैंने इसे समझ लिया, यह काम करता है! ; ' \t \t' ueberschriften.remove (nummer); ' \t \t' सार्वजनिक शून्य deleteItem (पूर्णांक nummer) { ' \t \t' stichpunkte.remove (nummer): यहाँ मेरी ListAdapter में हटाएं विधि के लिए मेरे कोड है '}' – OnClickListener
और इस प्रकार मैं इसे अपनी मुख्य गतिविधि में उपयोग करता हूं: 'Liste.deleteElement (groupPos); '' expListAdapter.deleteItem (groupPos); '' expListAdapter.notifyDataSetChanged(); ' – OnClickListener