如何在每次点击按钮时更新列表视图内容?

时间:2013-04-26 16:21:51

标签: android listview listadapter

每次单击按钮时,我都需要更新我的ListView内容(从数据库中检索)。我想在我的Android应用程序中包含一个书籍搜索功能。

为此,我将一些关键字作为输入。在按钮上单击从数据库中检索与关键字匹配的书籍详细信息,并以相同的布局显示在列表视图中。

我编写的代码会在每次点击按钮时创建一个新的ListView内容,并将其显示在上一个ListView下方。我需要更正。

首选解决方案是在按钮点击时更新列表视图内容。 删除先前显示的ListView也是可以接受的。

为此,我尝试getListView().inValidate()但没有奏效。 notifyDataSetChanged()也无效。请帮助:)

           public class searchActivity extends ListActivity {  
    String keyword;
    Button bsearch;
    EditText input;  
    JSONParser jParser = new JSONParser();
    JSONArray books = null;
    SimpleAdapter adapter;
    ArrayList<HashMap<String, String>> booksList;
    ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);      
        bsearch=(Button)findViewById(R.id.search);
        input=(EditText)findViewById(R.id.inputSearch);
        booksList = new ArrayList<HashMap<String, String>>();
        adapter=newSimpleAdapter(searchActivity.this,booksList,R.layout.search_list,new String[]{"bookname"},new int[] {R.id.bookname}); 

        getListView().setAdapter(adapter);
    bsearch.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view){ 
            keyword=input.getText().toString();
            new LoadAll().execute();
        }
    }); 
    }
    class LoadAll extends AsyncTask<String, String, String> {
        protected String doInBackground(String... args) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("keyword", keyword));
            JSONObject json =   Jparser.makeHttpRequest("http://10.0.2.2  /libraryconnect/search_book.php", "GET", params);
            Log.d("All books: ", json.toString());
            try {
                int success = json.getInt("success");
                if (success == 1) {
                    books = json.getJSONArray("books");
                    for (int i = 0; i < books.length(); i++) {
                        JSONObject c = books.getJSONObject(i);
                        String name = c.getString("bookname");
                        HashMap<String, String> map = new HashMap<String, String>();
                        map.put("bookname",bookname);
                        booksList.add(map); 
                    }
                } else {
            }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
        protected void onPostExecute(String file_url) {
            runOnUiThread(new Runnable() {
                public void run() {
                    adapter.notifyDataSetChanged();
                }   
            });
        }
    }   
} 

2 个答案:

答案 0 :(得分:1)

onClick(View v)中,从adapter

致电notifyDataSetChanged ()

答案 1 :(得分:0)

您可以更改列表视图的数据集,然后在其上调用notifyDataSetChanged(),而不是为其创建新的列表视图或新适配器。

您可以在Android ListView - Tutorial找到您需要了解的内容。