2011-12-29 25 views
8

câu hỏi này tương tự như thế này - Android - Listview delete item and Refresh.Chế độ xem danh sách xóa mục và Làm mới - android

tôi không thể làm mới bộ chuyển đổi của tôi với:

adapter.notifyDataSetChanged(); 

tôi đã cố gắng:

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

nhưng không thành công, chỉ cần một thời gian (kỳ lạ ...).

có câu trả lời khác có:

Call that Activity once again Using Intent 

sombody có thể cho tôi mã chính xác cho điều này (hoặc cho adapter/con trỏ)?

Tôi đang thử điều này trong một vài giờ mà không thành công.

mã của tôi đầy đủ:

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

public void Show_Alert_box (bối cảnh Bối cảnh, thông điệp String, String thời gian, int position) thức Chuỗi timestamp = thời gian;

   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

mục remove này từ bộ chuyển đổi và sau đó thông báo cho các thiết lập ngày phạt toàn bộ –

+0

bạn đang sử dụng gì cho bộ chuyển đổi của bạn? tức là một ArrayAdapter hoặc BaseAdapter, hoặc một lớp bạn bắt nguồn từ một trong số đó? –

+0

iv'đã thêm mã. hãy kiểm tra lại. – Smoker09

Trả lời

3

Vô hiệu hóa danh sách Xem sau khi thay đổi dữ liệu, bên trong ListActivity của bạn sử dụng các dòng sau khi dữ liệu được thay đổi

getListView().invalidate(); 
+0

không hoạt động ... bạn có thể kiểm tra mã của tôi không? – Smoker09

2

làm chức năng để ràng buộc adapter của bạn với listview và chỉ cần gọi một lần nữa chức năng đó trong khi xóa hoàn thành để Listview đầy một lần nữa và bạn nhận được danh sách làm mới.
Bạn có đang sử dụng cơ sở dữ liệu không?

+0

có i'm bằng cách sử dụng db. kiểm tra mã đã thêm của tôi. xe tăng! – Smoker09

2

thử sử dụng listview.invalidateViews(); sau adapter.remove(adapter.getItem(pos));

+0

vẫn không hoạt động. xe tăng. – Smoker09

6

Hãy thử

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

không hoạt động :) bạn có thể kiểm tra mã của tôi không? >>> – Smoker09

+0

bộ điều hợp của tôi thậm chí không có chức năng xóa –

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

bạn phải cập nhật những thay đổi trong DB của bạn thì bạn cập nhật ArrayList của bạn (với một requery hoặc một cái gì đó giống như kể từ khi nó bị phản đối) sau đó bạn phải gọi adapter.notifyDataSetChanged();

6

Bạn có thể nhận nó giải quyết nhưng chỉ trong trường hợp bất cứ ai khác có cùng một vấn đề, đây là giải pháp của tôi:

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

Vấn đề là bạn không có Adaptor của Danh sách của bạn.

+0

Làm việc cho tôi. Cảm ơn. – 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

Hãy thử

Intent intent= getIntent(); 
      finish(); 
      startActivity(intent); 
Các vấn đề liên quan