我正在构建一个图书阅读器应用程序,目前在如何转到下一章或上一章方面存在一些问题。
负责显示章节列表的片段(基本上是ListView)。我使用onItemClick:
捕获项目listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getActivity().getApplicationContext(),ReaderActivity.class);
intent.putExtra("name",adapter.getItem(i).getName());
intent.putExtra("url",adapter.getItem(i).getUrl());
startActivity(intent);
}
});
它将启动ReaderActivity
并显示图书的内容。现在ReaderActivity
有2个按钮可以移动到下一个/上一个章节。如何从ListView获取数据(name
和url
)?
目前我正在考虑两种方法:
在finish()
上调用ReaderActivity
并覆盖onDestroy()
方法以调用方法来获取包含ListView的片段中的下一个/上一个数据。
将章节的整个ArrayList传递给ReaderActivity
,以便它可以检索它想要的项目(可能不是一个好的解决方案,因为章节太多了。)
有更好的方法吗?
答案 0 :(得分:0)
我会将列表数据放在Application类(或其他单例)中,然后ReaderActivity就可以查询它以供下一章使用。实际上它可以获得下一章的细节并相应地更新其内容,而不需要创建新的活动。
答案 1 :(得分:0)
有很多方法可以获得最好的方法。
其中一些:
使用您的Application.java
从任何地方共享内存数据(数据存储)。例如:
public final Application extends android.app.Application {
private List<Chapter> chapters;
public void setChapters(List<Chapter> chapters) {
this.chapters = chapters != null ? chapters : Collections.<Chapter>epmtyList();
}
public List<Chapter> get Chapters() {
return chapters;
}
}
// from any place which has context (or is context)
List<Chapter> chapters = ((Application) getContext().getApplicationContext()).getChapters();
使用公共静态getter将列表设为静态成员,然后引用来自ReaderActivity
public final ApplicationActivity extends Activity {
private static List<Chapter> chapters;
....
public static List<Chapter> getChapters() {
return chapters;
}
将列表存储在共享首选项中,以便任何活动都可以引用它
在意向书中加入章节列表并将其传递给ReaderActivity
我认为你的ReaderActivity
需要处理整本书而不是一章。这意味着方法(4)很可能是一个好的候选人。