我试图在自定义适配器上使用notifyDataSetChanged()
在另一个类中更改数据时从一个类更改视图。
Class FragmentOne
启动添加listItems
的帖子。
然后我使用class FragmentTwo
并获取listItems
并更新我的观点。
我的代码---
Class FragmentOne
static ArrayList<String> listItems = null;
private class MonitorLogThread extends Thread
{
BufferedReader br;
@Override
public void run() {
while(((line=br.readLine()) != null) && !this.isInterrupted()){
listItems.add(line);
}
}
Class FragmentTwo
private BBLogListAdapter mBBLogListAdapter;
ArrayList<String> receiptlist;
@Override
protected void onResume() {
super.onResume();
if(receiptlist == null)
receiptlist = new ArrayList<String>();
else
receiptlist.clear();
// Initializes list view adapter.
mBBLogListAdapter = new BBLogListAdapter();
setListAdapter(mBBLogListAdapter);
mBBLogListAdapter.updateReceiptsList(FragmentOne.listItems);
mBBLogListAdapter.notifyDataSetChanged();
}
// Custom Adapter
private class BBLogListAdapter extends BaseAdapter {
//Code to set view dynamically according to data in adapter
public void updateReceiptsList(ArrayList<String> newlist) {
receiptlist.clear();
receiptlist.addAll(newlist);
}
//Some more code..
}
}
所以,目前我在onResume()方法中使用方法updateReceiptsList来更新 内容。这仅在我们恢复活动时更新。
但我希望在此活动中根据来自其他活动的数据更改自动刷新内容。
答案 0 :(得分:1)
正确处理此类问题的方法是使用ContentProvider
和CursorAdapter
s。更改数据后,将通知适配器,并且框架本身将处理所有同步。减轻痛苦,增加收益。
答案 1 :(得分:-1)
抓住你的适配器对象并在“FragmentTwo”中创建一个静态方法,
public static void notifyDataChanged(){
if(mBBLogListAdapter != null){
mBBLogListAdapter.updateReceiptsList(FragmentOne.listItems);
mBBLogListAdapter.notifyDataSetChanged();
}
}
每当线程中的数据发生变化时,请调用此静态方法。
static ArrayList<String> listItems = null;
private class MonitorLogThread extends Thread
{
BufferedReader br;
@Override
public void run() {
while(((line=br.readLine()) != null) && !this.isInterrupted()){
listItems.add(line);
FragmentTwo.notifyDataChanged();
}
}
请注意,您需要在FragmentTwo的onResume中使用与setAdapter相同的适配器对象
setListAdapter(mBBLogListAdapter);
PS:更清晰的替代方案是在“FragmentTwo”上使用侦听器来侦听“FragmentOne”上的任何数据更改。请参阅此处了解实施详情 - http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html
希望这有帮助。