2011-12-29 11 views
8

यह प्रश्न इसी तरह है - Android - Listview delete item and Refreshसूचीदृश्य आइटम हटाएं और ताज़ा करें - एंड्रॉइड

मैं के साथ मेरी एडाप्टर ताज़ा नहीं कर सकते:

adapter.notifyDataSetChanged(); 

मैंने कोशिश की:

adapter.remove(adapter.getItem(pos)); 

लेकिन सफलता नहीं मिली, सिर्फ एक बार (अजीब ...)।

एक और जवाब है:

Call that Activity once again Using Intent 

sombody मुझे इस के लिए सही कोड दे सकते हैं (या अनुकूलक/कर्सर के लिए)?

मैं सफलता के बिना कुछ घंटों तक कोशिश कर रहा हूं।

मेरा पूरा कोड:

protected void onCreate (Bundle SavedInstanceState) { 


    super.onCreate(SavedInstanceState); 
    setContentView(R.layout.personalmessageview); 

    headtitle= getIntent().getExtras().getString("head"); 

    setTitle(headtitle); 


    personalresults = getIntent().getExtras().getStringArrayList("personalres"); 
    personalresultswithtime = getIntent().getExtras().getStringArrayList("personalrestime"); 



    // setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,personalresults)); 

    ListView list = (ListView)findViewById(R.id.listview_personal);  
    // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, personalresults); 
    list.setAdapter(adapter); 
    registerForContextMenu(list); 


    list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) { 


       String time = personalresultswithtime.get(pos).toString(); 


        Show_Alert_box(v.getContext(),"Please select action.",time,pos); 


       return true; 
      } 
     }); 

सार्वजनिक शून्य Show_Alert_box (संदर्भ संदर्भ, स्ट्रिंग संदेश, स्ट्रिंग समय, पूर्णांक स्थिति) अंतिम स्ट्रिंग टाइमस्टैम्प = समय;

   final int pos = position; 

      final AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
       alertDialog.setTitle(getString(R.string.app_name)); 
       alertDialog.setButton("Delete", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         try 
         { 
          db = databaseHelper.getWritableDatabase(); 


          db.delete("messages","timestamp" + "=?", new String[] { timestamp }); 

          Log.d("DB"," delete! "); 

          ArrayAdapter<String> adapter = new ArrayAdapter<String>(PersonalMessageView.this, android.R.layout.simple_list_item_1, personalresults); 


            adapter.remove(adapter.getItem(pos)); //not working t all! why ? 

          list.notify(); 
          list.invalidate(); 


          personalresults.remove(pos); 
          personalresultswithtime.remove(pos); 

          adapter.notifyDataSetChanged(); 

          db.close(); 




         } 
         catch(Exception e) 
         { 

         } 
       } }); 
       alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         alertDialog.dismiss(); 
       } }); 

       alertDialog.setMessage(message); 
       alertDialog.show(); 

}

+0

निकालें आइटम का प्रयास करें और उसके बाद की तारीख –

+0

chaged सेट आप अपने एडाप्टर के लिए उपयोग कर रहे हैं क्या सूचित? यानी एक ऐरे एडाप्टर या बेस एडाप्टर, या एक वर्ग जिसे आपने उनमें से एक से लिया है? –

+0

iv'e कोड जोड़ा गया। कृपया इसे दोबारा जांचें। – Smoker09

उत्तर

3

डेटा परिवर्तन के बाद अमान्य सूची दृश्य, अपने ListActivity निम्नलिखित लाइनों

getListView().invalidate(); 
+0

काम नहीं कर रहा है ... क्या आप कृपया अपना कोड देख सकते हैं? – Smoker09

2

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

+0

हाँ मैं डीबी का उपयोग कर रहा हूँ। मेरा जोड़ा कोड देखें। टैंक! – Smoker09

2

listview.invalidateViews(); का उपयोग कर की कोशिश के बाद adapter.remove(adapter.getItem(pos));

+0

अभी भी काम नहीं कर रहा है। टैंक। – Smoker09

6

प्रयास करें

adapter.remove(adapter.getItem(pos)); 
notifyDataSetChanged(); 
+0

काम नहीं कर रहा है :) क्या आप कृपया अपना कोड देख सकते हैं? >>> – Smoker09

+0

मेरे एडाप्टर में फंक्शन –

0
public class Listview_cls extends Activity implements OnItemClickListener{ 
      ListView lv; 
      String items[]= {"Kolkata","Delhi","Mumbai","Pune"}; 
      ArrayAdapter adp; 
      public void onCreate(Bundle savedInstanceState) 
      { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      arr = new ArrayList(); 
      lv = (ListView) findViewById (R.id.ListView01); 
      for(int i=0; i<items.length; i++) 
      { 
       arr.add(items[i]); 
      } 
     adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr); 
     lv.setAdapter(adp); 
     lv.setOnItemClickListener(this); 
    } 


    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
    {  

    adp.remove(adp.getItem(arg2)); 
     adp.notifyDataSetChanged(); 

    } 
} 
2

आप अपने DB में परिवर्तन अद्यतन करने के लिए तो आप अपने ArrayList तो (क requery या की तरह के बाद से यह पदावनत है कुछ के साथ) को अद्यतन किया है आपको adapter.notifyDataSetChanged() को कॉल करना होगा;

6

आप शायद गया इसे हल लेकिन बाकी मामले बस में किसी को भी एक ही समस्या है, यहाँ मेरी समाधान है:

ArrayAdapter<String> myAdapter = (ArrayAdapter<String>)getListView().getAdapter(); 
myAdapter.remove(myAdapter.getItem(info.position)); 
myAdapter.notifyDataSetChanged(); 

समस्या यह थी कि आप अपनी सूची के एडाप्टर नहीं था।

+0

भी मेरे लिए काम नहीं किया है। धन्यवाद। – Si8

0
@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();  
     int position = info.position; 
     favouriteReportList d; 
     d= array_list.get(position); 
     switch (item.getItemId()) { 
      case R.id.connect:    
       return true; 
      case R.id.mark: 
       return true; 
      case R.id.delete:   
       myFavReport = new DBhandlerReport(this); 
       myFavReport.deleteMyFavReport(d.getReportName(), d.getPathName(), myUrl); 
       myFavReport.close(); 
// arrarAdapter is an object of your class. 
       arrayAdapter.remove(arrayAdapter.getItem(info.position)); 
       arrayAdapter.notifyDataSetChanged(); 
       return true;     
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 
-1

एडाप्टर से इस

Intent intent= getIntent(); 
      finish(); 
      startActivity(intent); 
संबंधित मुद्दे