2011-12-24 46 views
2

我正在嘗試爲我的主頁創建一個refesh函數。我搜查了很多網站,但我似乎無法找到一個(對我來說)合適的例子。我從一個sQLLite數據庫加載信息。當我使用我的添加活動並且返回到MainScreen活動時,我添加的項目不會顯示。如何在恢復活動的那一刻刷新這些數據。Android:恢復刷新ArrayAdapter

任何幫助,歡迎提前thx。

 public ListView whiskeylist; 
     String[] DataArryWhiskey; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Start db view of whiskey 
    DBConfig info = new DBConfig(this); 

    info.open(); 
     DataArryWhiskey = info.getDataInArray(); 
    info.close(); 


    whiskeylist = (ListView) findViewById(R.id.listofWhiskey); 
    whiskeylist.setOnItemClickListener(this); 
    whiskeylist.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey)); 


}// end onCreate 

在阿迪勒的意見,我的代碼更改爲

 public ListView whiskeylist; 
String[] DataArryWhiskey; 
ListAdapter Adapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Start db view of whiskey 
    DBConfig info = new DBConfig(this); 

    info.open(); 
     DataArryWhiskey = info.getDataInArray(); 
    info.close(); 


    whiskeylist = (ListView) findViewById(R.id.listofWhiskey); 
    Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey); 
    whiskeylist.setAdapter(Adapter); 

    // End db view of whiskey 


}// end onCreate 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    DBConfig info = new DBConfig(this); 

    info.open(); 
     DataArryWhiskey = info.getDataInArray(); 
    info.close(); 
    Adapter.notifyDataSetChanged(); // refresh adapter  
} 

但是我得到notifyDataSetChanged一個錯誤「的方法notifyDataSetChanged是未定義的類型ListAdapter」 < - 通過改變ListAdapter固定它到ArrayAdapter,但該應用程序仍然崩潰。

回答

1

//取得了您的onCreate方法的變化,見下文

DBConfig info; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

// Start db view of whiskey 
info = new DBConfig(this); 
whiskeylist = (ListView) findViewById(R.id.listofWhiskey); 
whiskeylist.setOnItemClickListener(this); 
}// end onCreate 

另一種方法在下面給出,從ActivityResult()調用此方法,但在此之前這樣做保證那 你添加了另一個活動的字段也保存到數據庫中。 調用的數據顯示()從onActivityResult方法或從的onResume()

private void showData() 
{ 
    info.open(); 
    DataArryWhiskey = info.getDataInArray(); 
info.close(); 
whiskeylist.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey)); 
} 
+0

你在哪裏調用showData方法? – user1114720 2011-12-24 18:37:18

+0

有一個問題,你是如何開始你的添加活動? 兩步..如果你是通過startActivityForResult開始你的添加Activty。 1)從onActivityResult方法調用showData() 2)或者從onResume() – AAnkit 2011-12-24 19:56:58

+0

中調用此方法設置另一個適配器是不好的方法。你應該刷新舊的適配器。 – 2011-12-26 11:12:28

1

獲取的ArrayAdapter adapter;一類級別的變量並初始化它像這樣:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey); 
hiskeylist.setAdapter(adapter); 

和內部onResume()不喜歡這種方式。

public void onResume() 
{ 
    super.onResume(); 
    info.open(); 
    DataArryWhiskey = info.getDataInArray(); 
    info.close(); 
    adapter.notifyDataSetChanged(); // refresh adapter  
} 

我的建議: 既然你是從數據庫中獲取你的價值觀,用SimpleCursorAdapter代替ArrayAdapter。這也會爲你做很多其他的工作。

Here is a tutorial如何使用SimpleCursorAdapter

+0

我似乎無法得到適配器workoing – user1114720 2011-12-24 18:25:40

+0

我得到的notifyDataSetChanged錯誤「方法notifyDataSetChanged未定義類型ListAdapter」請參閱原始問題的代碼 – user1114720 2011-12-24 18:32:33

1

您可以嘗試添加條目之前使用adapter.clear();