【发布时间】:2015-11-20 21:29:17
【问题描述】:
我是 Android 的初学者,因此我为所犯的错误深表歉意,如果有任何建设性的批评,我将不胜感激。
我正在编写一个带有图像 ListView 的基本应用程序,当用户单击列表中的某个项目时,我想在 ViewPager 中显示该图像,用户可以在其中来回滑动以浏览整个图像列表。之后当用户按下后退按钮时,我想切换回 ListView。
我在 MainActivity 中管理业务逻辑,它将 MainActivityFragment 用于 ListView,ImageHolderFragment 用于 ViewPager。
目前的简化代码如下:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListItems = new ArrayList<>();
mListItemAdapter = new ListItemAdapter(this, R.layout.list_item, R.id.list_item_name, mListItems);
mListView = (ListView) findViewById(R.id.list_view_content);
mListView.setAdapter(mListItemAdapter);
mDeletedListItems = new ArrayList<>();
mViewPager = (ViewPager) getLayoutInflater().inflate(R.layout.image_display, null, true);
mImageAdapter = new ImageAdapter(getSupportFragmentManager(), mListItems);
mViewPager.setAdapter(mImageAdapter);
mViewPager.setOffscreenPageLimit(3);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mViewPager.setCurrentItem(position);
setContentView(mViewPager); // TODO: this is very wrong!
}
});
loadImages();
noContentText = (TextView) findViewById(R.id.no_content_text);
if (mListItems.isEmpty()) {
noContentText.setText(R.string.no_images);
} else {
mImageAdapter.notifyDataSetChanged();
}
}
虽然这在某种程度上确实有效,这意味着它可以在单击列表中的项目时显示 ViewPager,但它敲响了警钟有两件事:
- 我了解到,在同一个班级中第二次调用 setContentView() 几乎是一种罪过。没有人向我解释原因。
- 在这种情况下,后退按钮不起作用。当它被按下时,应用程序被终止而不是返回到列表视图。我相信这与第一点有关。
如果我的想法完全错误,我将不胜感激任何帮助和解释,如果我的情况没有希望,我希望看到 ListView 和 ViewPager 的成功组合以及彼此之间的转换。
【问题讨论】:
标签: android android-fragments android-listview android-viewpager