2013-04-26 83 views
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(); 
       } 
      }); 
     } 
    } 
} 
+0

上無效,不需要(),notifyDataSetChanged()直接更新適配器添加到列表中的buttonclicklistener – Venkat 2013-04-26 17:47:40

+0

我想我會做setAdapter上的onCreate,不onPostExecute – Duc 2013-04-27 09:33:40

+0

@Duc也試過。但沒有改變! – Revathy 2013-04-27 09:51:07

回答

0

您可以更改數據集的列表視圖,並調用它notifyDataSetChanged(),而不是爲它創造新的列表視圖或新的適配器。

你可以在Android ListView - Tutorial找到你需要知道的東西。

+0

我已經嘗試notifyDataSetChanged()。它不工作,我正在使用ListAdapter – Revathy 2013-04-26 16:28:16

+0

@Revathy你在哪裏調用notifyDataSetChanged()?以及如何更改數據集? – hasanghaforian 2013-04-26 16:30:40

+0

我從我的按鈕的onclick()函數中調用它。 – Revathy 2013-04-26 16:47:24

1

在你onClick(View v),請致電notifyDataSetChanged()adapter

+0

是否有可能與ListAdapter一起使用notifyDataSetChanged()? – Revathy 2013-04-26 17:02:01

+0

我認爲這是問題,notifyDataSetChanged()適用於ArrayAdapter。因爲ListAdapter不擴展BaseAdapter,所以它不起作用。如果你確實需要ListAdapter,你可能需要構建自己的適配器,否則,請嘗試如下所示:http://stackoverflow.com/questions/6102060/android-listview-refresh – Duc 2013-04-26 19:19:25

相關問題