所以我现在在尝试将 FragmentStatePagerAdapter 与 Loader API 一起使用时遇到了这个问题,但在 UI 中没有设置任何值我的意思是当 onLoadFinished() 完成并将值设置为 TextView、ImageView 和 changeCursor 到我的适配器时没有反映它,我看到了我在 XML 中设置的 UI。
让我们看看我是否可以清楚地解释这个问题。
我有一个列表,当一个项目被点击时,你会看到这个的详细视图。当一个项目被选中时,两个元素被发送到细节,ids 数组和被选中项目的位置。
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent intent = new Intent(ActionConstant.DETAIL);
intent.putExtra("ids", ids);
intent.putExtra("position", position);
startActivity(intent);
}
});
因此,在 DetailActivity 中有一个 ViewPager,它有一个 FragmentStatePagerAdapter,它使用 id 和位置来加载正确的数据。
@Override
public void onCreate(Bundle savedIntanceState) {
super.onCreate(savedIntanceState);
setContentView(R.layout.detail);
ids = getIntent().getLongArrayExtra("ids");
int currentIndex = getIntent().getIntExtra("position",-1);
mPagerAdapter = new DetailPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager, attaching the adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setCurrentItem(currentIndex);
}
并且 DetailPagerAdapter 覆盖 getItem 和 getCount (返回 ids.length)
@Override
public Fragment getItem(int i) {
return DetailFragment.newInstance(ids[i]);
}
现在在 DetailFragment 中 newInstance 执行此操作
公共静态 DetailFragment newInstance(long id) { DetailFragment f = new DetailFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putLong("_id", id);
f.setArguments(args);
return f;
}
当 onLoadFinished 被调用时。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (loader.getId() == 1)
adapter.changeCursor(cursor);
else if (loader.getId() == 2) {
if (!cursor.moveToNext())
return;
textName.setText(cursor.getString(cursor.getColumnIndexOrThrow(TraderColumns.NAME)));
}
}