我正在尝试在Android应用上处理方向更改。在方向更改后尝试为我的ListFragment设置适配器时遇到问题。没有例外,但清单仍然是空的;它没有填充给定的数据。
我知道在方向更改时会重新创建整个活动。我还实现了一种将数据从旧方向传递到新方向的方法。我在调用ListFragment.setAdapter()之前检查过,数据的ArrayList不为空,它包含与以前完全相同的数据。我也确信我的自定义适配器类没有任何缺陷,因为它第一次完全填满了列表。
另外,我的目标是低于3.0的设备,所以我使用android.support.v4.app.ListFragment
来实现我的ListFragment。
这是我的onCreate()方法:
private ListFragment fragmentA;
private ListFragment fragmentB;
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.my_activity);
ActionBar bar = getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tabA = bar.newTab().setText("TabA");
ActionBar.Tab tabB = bar.newTab().setText("TabB");
fragmentA = new MyListFragment();
fragmentB = new MyListFragment();
Object retained = getLastCustomNonConfigurationInstance();
if (retained instanceof MyAsyncTask) {
ResultWrapper result = ((MyAsyncTask) retained).getResult();
Log.d("MyActivity", "retained is instance of MyAsyncTask");
if (result.nowResult == null) {
Log.d("MyActivity", "null");
} else {
Log.d("MyActivity", "nowResult size" + result.nowResult.size());
fragmentA.setListAdapter(new MyListAdapter(this,
R.layout.my_list_item, result.nowResult));
}
fragmentB.setListAdapter(new MyListAdapter(this,
R.layout.my_list_item, result.myResult));
} else {
fetcher = new MyAsyncTask(this);
fetcher.execute();
}
tabA.setTabListener(new MyTabListener(fragmentA));
tabB.setTabListener(new MyTabListener(fragmentB));
bar.addTab(tabA);
bar.addTab(tabB);
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
可能没有调用你的getView方法。要解决此问题,请在ListFragment中调用:setListShown(true)。使用兼容性库时,您有义务执行此操作。
亲切的问候, BRAM