我正在尝试使用notifyDataSetChanged()
自定义适配器在另一类中更改数据时从一个类更改视图。
Class FragmentOne
在其中listItems
添加线程的地方开始。
然后,我正在使用class FragmentTwo
并获取这些信息listItems
并更新我的视图。
我的代码-
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);
}
}
类片段2
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来更新内容。这仅在我们恢复活动时更新。
但是我想根据另一个活动中的数据更改在此活动中自动刷新内容。
抓住适配器对象,并在“ 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
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句