2012-11-19 68 views
0

我有一個帶有ListView的Android應用程序。每行都由SQLIte查詢結果以二進制方式生成。當用戶點擊一個項目時,應用程序應該刷新該項目的「內容」,由另一個SQLite查詢生成,等等。 我試圖「刷新」活動創建一個新的意圖,並將其發送到同一活動。活動名稱是ShopActivity刷新ListView的方法

 ListView list_content = ((ListView)findViewById(R.id.listforshop)); 
     list_content.setOnItemClickListener(new OnItemClickListener() { 
         @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    

      // ID and text of selected item 
      long selected_id = id; 
      String selected_name = (String) ((TextView) view.findViewById(R.id.element)).getText(); 

      // New intent 
      Intent intent = getIntent(); 
      intent.setClassName(ShopActivity.this, ShopActivity.class.getName()); 

      // Passing data and refreshing activity 
      intent.putExtra("id", selected_id); 
      intent.putExtra("name", selected_name); 
      intent.putExtra("type", ""); 
      startActivity(intent); 
     }   }); 

這樣的logcat顯示了我很多關於捆綁的警告。看來,該應用程序無法啓動活動。

是否有另一種方式來「刷新」ListView?這個實現是否正確?

+0

當你的列表中的數據需要更新時,你應該嘗試在你的適配器上調用notifyDataSetChanged(),並可能在你的ListView上invalidate()以請求視圖重繪自己 –

回答

1
// New intent 
Intent intent = getIntent(); 
intent.setClassName(ShopActivity.this, ShopActivity.class.getName()); 

這不會使一個新的意圖,這重新使用現有的一個......再使用這樣的意圖將引發大量的警告和異常的,當你繼續這個活動。爲了創建一個新的意圖,你需要使用關鍵字new

但是,您並不需要重新加載整個活動,只需獲取新的遊標並使用CursorAdapter#swapCursor()來刷新您的ListView。

0

當試圖刷新您的ListView時,您應該考慮使用適配器的notifyDataSetChanged()。此方法會告訴您的適配器所提供的數據已更改,並且它應更新列表視圖。

所以你應該添加新的數據到你的適配器,然後調用這個方法。

0

聽起來就像你在查看細節,不要使用相同的活動來查看它們。添加一個新的ShopDetailActivity並指導用戶點擊,這樣用戶可以按回去到原始列表(加上得到漂亮的過渡動畫)。

+0

是的,最後我決定遵循這個辦法 :) – Andres7X

0

處理列表和細節的另一種方式是使用碎片。這樣做的好處是,在大屏幕設備上,列表和詳細信息可以同時顯示。

使用一個活動來顯示列表和細節都很混亂。至少,使用兩個活動。