Roc*_*e28 9 android refresh fragment android-arrayadapter
我正在使用Fragments创建一个联系人列表应用程序,其中一个frag是联系人列表中的名称列表,另一个是剩余的详细信息.
这是显示名称列表的类
public class MyListFragment extends ListFragment {
private ContactStorage contactStorage = new ContactStorage();
public final static String TAG = "FRAGMENTS";
private MainActivity parent;
ArrayAdapter<String> adapter;
ArrayList<String> entries = new ArrayList<String>();
String array[];
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.list_layout, null);
parent = (MainActivity) getActivity();
entries = contactStorage.getContactListNames();
adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
android.R.layout.simple_list_item_1, entries);
setListAdapter(adapter);
Log.d(TAG, "Adapter created");
array = contactStorage.getContactDetails();
return v;
}
@Override
public void onResume() {
super.onResume();
entries = contactStorage.getContactListNames();
adapter.notifyDataSetChanged();
Log.d(TAG, "List Frag Resumed");
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是ArrayAdapter在恢复时不刷新.
当屏幕旋转时,它再次运行onCreateView(),但是我需要它来刷新onResume.我查看了这个网站加载,发现什么,但"使用notifyDataSetChanged()",这是行不通的.
Elu*_*tar 29
您遇到的问题是您正在覆盖条目引用,并且它不会在适配器上进行更改.这是你如何解决这个问题
@Override
public void onResume() {
super.onResume();
entries.clear();
entries.addAll(contactStorage.getContactListNames());
adapter.notifyDataSetChanged();
Log.d(TAG, "List Frag Resumed");
}
Run Code Online (Sandbox Code Playgroud)
这是一个常见的错误,这是因为当你第一次创建一个列表(在内存中)并且你的entries字段指向那个时,你会告诉adapter它在创建它时查看该内存位置,但是onResume你创建了一个新列表内存(当你再次获得联系人列表名称)并告诉条目指向内存中的新列表时,你需要做的是用新列表中的条目替换原始列表中的条目,这样adapter仍然会引用相同的列表.
notifyDataSetChanged()对您不起作用。原因
您的适配器失去对您的列表的引用。首次初始化适配器时,它会引用您的arrayList并传递给其超类。但是,如果您重新初始化现有的arrayList,它将丢失引用,因此将使用Adapter :(。
始终创建新列表并将其添加到适配器。这样做:
保持对文档的信任
| 归档时间: |
|
| 查看次数: |
16856 次 |
| 最近记录: |