【问题标题】:Listview delete item and Refresh - androidListview删除项目和刷新 - android
【发布时间】:2011-12-29 03:58:22
【问题描述】:

这个问题与此类似 - Android - Listview delete item and Refresh

我无法刷新我的适配器:

adapter.notifyDataSetChanged();

我试过了:

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

但没有成功,只有一次(奇怪...)。

那里还有另一个答案:

Call that Activity once again Using Intent

有人可以给我这个(或适配器/光标)的确切代码吗?

我尝试了几个小时但没有成功。

我的完整代码:

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(上下文上下文,字符串消息,字符串时间,int位置) 最终字符串时间戳 = 时间;

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

}

【问题讨论】:

  • 从适配器中删除项目,然后通知日期设置更改
  • 您的适配器使用什么?即一个 ArrayAdapter 或 BaseAdapter,还是从其中一个派生的类?
  • iv`e 添加了代码。请再检查一遍。

标签: java android


【解决方案1】:

你可能已经解决了,但以防万一其他人有同样的问题,这是我的解决方案:

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

问题是您没有列表的适配器。

【讨论】:

  • 为我工作。谢谢。
【解决方案2】:

试试

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

【讨论】:

  • 我的适配器连remove功能都没有
【解决方案3】:

数据更改后列表视图无效,在您的 ListActivity 内,当数据更改时使用以下行

 getListView().invalidate();

【讨论】:

    【解决方案4】:

    尝试在adapter.remove(adapter.getItem(pos)); 之后使用listview.invalidateViews();

    【讨论】:

      【解决方案5】:

      制作函数将您的适配器与 Listview 绑定,并在删除完成时再次调用该函数,以便 Listview 再次填充并刷新列表。
      你在使用数据库吗?

      【讨论】:

        【解决方案6】:

        您必须更新数据库中的更改,然后更新您的数组列表(使用重新查询或类似的东西,因为它已被弃用) 那么你必须调用 adapter.notifyDataSetChanged();

        【讨论】:

          【解决方案7】:
              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();
          
              }
          }
          

          【讨论】:

            【解决方案8】:
            @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);
                    }
                }
            

            【讨论】:

              【解决方案9】:

              您的问题是您正在创建一个新的适配器对象并在其上调用 .notifyDataSetChanged(),而不是在您附加到列表视图的适配器上。

              【讨论】:

                【解决方案10】:

                试试这个

                Intent intent= getIntent();
                            finish();
                            startActivity(intent);
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-08-02
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-10-18
                  • 1970-01-01
                  • 2012-06-22
                  相关资源
                  最近更新 更多