2011-09-10 12 views
7

मैं कस्टम सूचीदृश्य पंक्ति बनाने के लिए बेसएडाप्टर का विस्तार कर रहा हूं। मेरे पास संदर्भ मेनू है जो हर बार उपयोगकर्ता द्वारा पंक्ति पर खुलता है और संकेत देता है कि क्या वह इसे हटाना चाहता है। हालांकि मैं पंक्ति को कैसे हटा सकता हूं? हैशपैप केवल टेस्ट डेटा है।मैं अपने कस्टम बेस एडाप्टर से किसी आइटम को कैसे हटा सकता हूं?

private MyListAdapter myListAdapter; 
private ArrayList<HashMap<String, String>> items; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    items = new ArrayList<HashMap<String,String>>(); 
    HashMap<String, String> map1 = new HashMap<String, String>(); 
    map1.put("date", "10/09/2011"); 
    map1.put("distance", "309 km"); 
    map1.put("duration", "1t 45min"); 
    items.add(map1); 

    myListAdapter = new MyListAdapter(this, items); 
    setListAdapter(myListAdapter); 
    getListView().setOnCreateContextMenuListener(this); 
} 


private class MyListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<HashMap<String, String>> items; 

    public MyListAdapter(Context context, ArrayList<HashMap<String, String>> items) { 
     this.context = context; 
     this.items = items; 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return items.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View view = convertView; 

     if (view == null) { 
      LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.row_log, null); 
     } 

     TextView rowLogOverview = (TextView) view.findViewById(R.id.rowLogOverview); 

     HashMap<String, String> item = items.get(position); 
     rowLogOverview.setText(item.get("date")); 

     return view; 
    } 
} 

उत्तर

15

आप एडाप्टर से हटाना नहीं है! आप वस्तुओं से हटाते हैं! और एडाप्टर आपके आइटम और दृश्य के बीच है। दृश्य से आप स्थिति प्राप्त कर सकते हैं और स्थिति के अनुसार आप आइटम हटा सकते हैं। फिर एडाप्टर आपको विचारों को ताज़ा करेगा।

इसका मतलब है कि आप आइटम

  • कॉल BaseAdapter.notifyDataSetChanged() से इस

    items.remove(position); 
    adapter.notifyDataSetChanged() 
    
  • +1

    बुला 'adapter.notifyDataSetChanged()' अनुकूलक करने के लिए बाध्य करने के लिए 'items' ListView अद्यतन करेगा। – Aryo

    1
    1. निकालें आइटम की तरह कुछ करने की ज़रूरत है। फिर सूचीदृश्य को फिर से खींचा जाएगा और लक्ष्य पंक्ति को स्क्रीन से हटा दिया जाएगा।
    9

    हटाने के लिए आप 2 बातें करने की आवश्यकता होगी:

    1. अपने ArrayList (आइटम) पर कॉल .remove()
    2. अपने MyListAdapter कक्षा (mListAdapter) के उदाहरण पर .notifyDataSetChanged() पर कॉल करें।
    संबंधित मुद्दे