0

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

2 回答 2

1

在你的,从你的onClick(View v)调用notifyDataSetChanged ()adapter

于 2013-04-26T16:27:31.667 回答
0

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

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

于 2013-04-26T16:25:26.240 回答