繁体   English   中英

ListView 未使用 AsyncTask 中的适配器更新

[英]ListView not getting updated with adapter in AsyncTask

我是 Android 和 SQLite 的初学者,在我的应用程序中,我从 SQLite 数据库中获取数据并使用 AsyncTask 将其添加到 ListView。 但是 ListView 在 onPostExecute 方法中没有得到更新。

主要活动代码 -

private class Updateentries extends AsyncTask<String, Void, Void>{

    @Override
    protected Void doInBackground(String... strings) {
        cursor = db.query(SQLiteHelper.Table_name, new String[]{"name"}, "name like ?", new String[]{"%"+strings[0]+"%"}, null, null, null );
        cursorarray = new ArrayList<>();
        if(!cursor.moveToFirst()){
            Toast.makeText(OtherActivity.this, "NO DATA FOUND", Toast.LENGTH_SHORT).show();
        }else{
            do {
                String entry = cursor.getString(cursor.getColumnIndex(SQLiteHelper.name_column));
                cursorarray.add(entry);
            }while(cursor.moveToNext());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        displaylistadapt = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1,cursorarray);
        displaylist.setAdapter(displaylistadapt);
        super.onPostExecute(aVoid);
    }
}

public boolean onCreateOptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.searchactionbar, menu);
    searchtoggle = (SearchView) menu.findItem(R.id.search_toggle).getActionView();

    searchtoggle.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            new Updateentries().execute(query);
            return false;
        }
        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

我的应用程序使用搜索视图从数据库中获取数据,然后将其显示在列表视图中。

最好先创建视图和适配器,然后再获取数据更新适配器并调用适配器。 notifyDataSetChanged()

也代替getApplicationContext()使用activityContext

ArrayList<String> cursorarray = new ArrayList();

class MainActivity{

void oncreate(){

...
     displaylistadapt = new ArrayAdapter(this, android.R.layout.simple_list_item_1,cursorarray);
     displaylist.setAdapter(displaylistadapt);


....


private class Updateentries extends AsyncTask<String, Void, ArrayList<String>>{

@Override
protected ArrayList<String> doInBackground(String... strings) {
    cursor = db.query(SQLiteHelper.Table_name, new String[]{"name"}, "name like ?", new String[]{"%"+strings[0]+"%"}, null, null, null );
    ArrayList <String> list = new ArrayList<>();
    if(!cursor.moveToFirst()){
        Toast.makeText(OtherActivity.this, "NO DATA FOUND", Toast.LENGTH_SHORT).show();
    }else{
        do {
            String entry = cursor.getString(cursor.getColumnIndex(SQLiteHelper.name_column));
            list.add(entry);
        }while(cursor.moveToNext());
    }
    return list;
}



   @Override
   protected void onPostExecute(ArrayList<String> list) {
        cursorarray.clear();
        cursorarray.addAll(list);
        displaylistadapt.notifyDataSetChanged();
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM