刷新的ListView从数据库中删除后 [英] refresh ListView after delete from database

查看:122
本文介绍了刷新的ListView从数据库中删除后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个SimpleCursorAdapter一个ListView,它从数据库加载信息,我想onlongclicklistener来删除数据库中的一个项目,它工作正常,但名单没有刷新,我试着用listView.refreshDrawableState();而且,我发现作为答案,但没有一个人工作的一些其他的方法,这是我的onCreate功能:

 公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.layout_act);
    imzero =(ImageView的)findViewById(R.id.iv_zero_pers);
    tvzero =(TextView中)findViewById(R.id.tv_zero_pers);
    dbConnector =新DatabaseConnectorrso(MyListActivity.this);
    dbConnector.checkCursor();
    如果(DatabaseConnector.de)//检查数据库emplty
    {
    尝试{
        dbConnector.open();
        dbConnector.load();从数据库中//负载信息
        dbConnector.close();
        imzero.setVisibility(View.GONE);
        tvzero.setVisibility(View.GONE);
    }
    赶上(例外前){
        ex.printStackTrace();
        dbConnector.close();
    }
    conAdapter =(新ImageAndTextAdapter(MyListActivity.this,
            R.layout.meniu_lista_element,NULL,NULL,NULL));
    setListAdapter(conAdapter);
    }
    其他{
        dbConnector.close();
        imzero.setVisibility(View.VISIBLE);
        tvzero.setVisibility(View.VISIBLE);
    }
 

和我试图刷新这样的名单

  listView.setOnItemLongClickListener(新OnItemLongClickListener(){
        @覆盖
        公共布尔onItemLongClick(适配器视图<>母公司视图中查看,INT位置,长的id){
            deleteDialog(的Integer.parseInt(DatabaseConnector.id.get(位置))); //从数据库中删除
            dbConnector.checkCursor();
            如果(DatabaseConnector.de)
            {
            尝试{
                dbConnector.open();
                dbConnector.loadPersoane();
                listView.refreshDrawableState();
                dbConnector.close();
                imzero.setVisibility(View.GONE);
                tvzero.setVisibility(View.GONE);
            }
            赶上(例外前){
                ex.printStackTrace();
                dbConnector.close();
            }
            conAdapter =(新ImageAndTextAdapter(AltePersoane.this,
                    R.layout.meniu_lista_element,NULL,NULL,NULL));
            setListAdapter(conAdapter);
            }
            其他{
                dbConnector.close();
                imzero.setVisibility(View.VISIBLE);
                tvzero.setVisibility(View.VISIBLE);
            }

            返回true;
        }
    });
 

解决方案

尝试

  yourAdapter.notifyDataSetChanged();
 

  yourAdapter.getCursor()重新查询();
 

更新

我认为你做错了什么,试试这个:

  listView.setOnItemLongClickListener(新OnItemLongClickListener(){
    @覆盖
    公共布尔onItemLongClick(适配器视图<>母公司视图中查看,INT位置,长的id){
        deleteDialog(的Integer.parseInt(DatabaseConnector.id.get(位置))); //从数据库中删除
        dbConnector.checkCursor();
        如果(DatabaseConnector.de)
        {
        尝试{
            dbConnector.open();
            dbConnector.loadPersoane();
                                //删除
            dbConnector.close();
            imzero.setVisibility(View.GONE);
            tvzero.setVisibility(View.GONE);
        }
        赶上(例外前){
            ex.printStackTrace();
            dbConnector.close();
        }
        conAdapter.notifyDataSetChanged();
        }
        其他{
            dbConnector.close();
            imzero.setVisibility(View.VISIBLE);
            tvzero.setVisibility(View.VISIBLE);
        }

        返回true;
    }
});
 

I have a ListView with a SimpleCursorAdapter,it load informations from a database,I want onlongclicklistener to delete an item from database,it works fine,but the list does not refreshes,I tried with listView.refreshDrawableState(); and some other methods that I found as answer but no one works,this is my onCreate function:

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_act);
    imzero = (ImageView)findViewById (R.id.iv_zero_pers);
    tvzero = (TextView)findViewById (R.id.tv_zero_pers);
    dbConnector = new DatabaseConnectorrso(MyListActivity.this);
    dbConnector.checkCursor();
    if (DatabaseConnector.de)//check if database is emplty
    {
    try{                
        dbConnector.open();             
        dbConnector.load();//load information from database
        dbConnector.close();
        imzero.setVisibility(View.GONE);
        tvzero.setVisibility(View.GONE);
    }
    catch(Exception ex) {
        ex.printStackTrace();
        dbConnector.close();
    }
    conAdapter =(new ImageAndTextAdapter(MyListActivity.this,
            R.layout.meniu_lista_element, null, null, null));
    setListAdapter(conAdapter);
    }
    else{
        dbConnector.close();
        imzero.setVisibility(View.VISIBLE);
        tvzero.setVisibility(View.VISIBLE);
    }

and I tried to refresh the list like this

   listView.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            deleteDialog(Integer.parseInt (DatabaseConnector.id.get(position))); //delete from database 
            dbConnector.checkCursor();
            if (DatabaseConnector.de)
            {
            try{                
                dbConnector.open();             
                dbConnector.loadPersoane();
                listView.refreshDrawableState();
                dbConnector.close();
                imzero.setVisibility(View.GONE);
                tvzero.setVisibility(View.GONE);
            }
            catch(Exception ex) {
                ex.printStackTrace();
                dbConnector.close();
            }
            conAdapter =(new ImageAndTextAdapter(AltePersoane.this,
                    R.layout.meniu_lista_element, null, null, null));
            setListAdapter(conAdapter);
            }
            else{
                dbConnector.close();
                imzero.setVisibility(View.VISIBLE);
                tvzero.setVisibility(View.VISIBLE);
            }

            return true;
        }
    }); 

解决方案

Try

yourAdapter.notifyDataSetChanged();

or

yourAdapter.getCursor().requery();

Update:

I think you're doing something wrong, try this:

listView.setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        deleteDialog(Integer.parseInt (DatabaseConnector.id.get(position))); //delete from database 
        dbConnector.checkCursor();
        if (DatabaseConnector.de)
        {
        try{                
            dbConnector.open();             
            dbConnector.loadPersoane();
                                //Removed
            dbConnector.close();
            imzero.setVisibility(View.GONE);
            tvzero.setVisibility(View.GONE);
        }
        catch(Exception ex) {
            ex.printStackTrace();
            dbConnector.close();
        }
        conAdapter.notifyDataSetChanged();
        }
        else{
            dbConnector.close();
            imzero.setVisibility(View.VISIBLE);
            tvzero.setVisibility(View.VISIBLE);
        }

        return true;
    }
}); 

这篇关于刷新的ListView从数据库中删除后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆