Java Listview删除项目并刷新-android

Java Listview删除项目并刷新-android,java,android,Java,Android,这个问题类似于这个- 我无法使用以下命令刷新适配器: adapter.notifyDataSetChanged(); 我试过: adapter.remove(adapter.getItem(pos)); 但是没有成功,只有一次(奇怪…) 还有另一个答案: Call that Activity once again Using Intent sombody可以给我这个(或适配器/游标)的确切代码吗 我尝试了几个小时,但没有成功 我的完整代码: protected void onCreate

这个问题类似于这个-

我无法使用以下命令刷新适配器:

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;
            }
        });
创建时受保护的void(Bundle SavedInstanceState){
super.onCreate(SavedInstanceState);
setContentView(R.layout.personalmessageview);
headtitle=getIntent().getExtras().getString(“head”);
标题(标题);
personalresults=getIntent().getExtras().getStringArrayList(“personalres”);
personalresultswithtime=getIntent().getExtras().getStringArrayList(“personalrestime”);
//setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,personalresults));
ListView列表=(ListView)findViewById(R.id.ListView\u personal);
//ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,personalresults);
list.setAdapter(适配器);
registerForContextMenu(列表);
list.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
长点击(AdapterView av、View v、int pos、long id){
字符串时间=personalresultswithtime.get(pos.toString();
显示警告框(v.getContext(),“请选择操作”,时间,位置);
返回true;
}
});
公共无效显示警告框(上下文上下文、字符串消息、字符串时间、整数位置) 最终字符串时间戳=时间

              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();
final int pos=位置;
final AlertDialog AlertDialog=新建AlertDialog.Builder(context.create();
setTitle(getString(R.string.app_name));
alertDialog.setButton(“删除”,新建DialogInterface.OnClickListener()){
public void onClick(DialogInterface dialog,int which){
尝试
{
db=databaseHelper.getWritableDatabase();
db.delete(“消息”,“时间戳”+“=?”,新字符串[]{timestamp});
Log.d(“DB”,“delete!”);
ArrayAdapter=新的ArrayAdapter(PersonalMessageView.this,android.R.layout.simple\u list\u item\u 1,personalresults);
adapter.remove(adapter.getItem(pos));//完全不工作!为什么?
list.notify();
list.invalidate();
个人结果。移除(pos);
personalresultswithtime.remove(pos);
adapter.notifyDataSetChanged();
db.close();
}
捕获(例外e)
{
}
} }); 
alertDialog.setButton2(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(DialogInterface dialog,int which){
alertDialog.disclose();
} }); 
alertDialog.setMessage(消息);
alertDialog.show();

}

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

 getListView().invalidate();

使函数将适配器与Listview绑定,并在删除完成时再次调用该函数,以便再次填充Listview并刷新列表。

您正在使用数据库吗?

尝试使用
listview.invalidateViews()
适配器.remove之后(adapter.getItem(pos))

试试看

adapter.remove(adapter.getItem(pos));
notifyDataSetChanged();
public类Listview\u cls扩展活动实现ListListener{
ListView lv;
字符串项[]={“加尔各答”、“德里”、“孟买”、“浦那”};
ArrayAdapter adp;
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
arr=新的ArrayList();
lv=(ListView)findViewById(R.id.ListView01);

对于(int i=0;i您必须更新数据库中的更改,然后更新您的arraylist(由于它已被弃用,因此需要重新查询或类似的方式)
然后,您必须调用adapter.notifyDataSetChanged();

您可能已经解决了它,但为了防止其他人也有同样的问题,我的解决方案如下:

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

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

试试这个

@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);
        }
    }
Intent intent= getIntent();
            finish();
            startActivity(intent);

您的问题是您正在创建一个新的适配器对象并调用.notifyDataSetChanged()从适配器中删除项,然后通知日期集更改您的适配器使用的是什么?即ArrayAdapter或BaseAdapter,或您从其中一个派生的类?iv`e添加了代码。请再次检查。对我有效。谢谢。我的适配器甚至没有ve删除函数
Intent intent= getIntent();
            finish();
            startActivity(intent);