如何使用 ListView 的上一个或下一个位置的数据重新启动 activity
How to restart activity with data of previous or next position of a ListView
我正在构建一本书 reader 应用程序,目前在如何转到下一章或上一章方面遇到一些问题。
负责显示章节列表的片段(基本上是一个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 个按钮可以移动到 next/previous 章节。如何从 ListView 获取数据(name
和 url
)?
目前我在想两种方法:
在 ReaderActivity
上调用 finish()
并覆盖 onDestroy()
方法以调用一个方法来获取保存片段中的 next/previous 数据列表显示。
将整个 ArrayList 的章节传递给 ReaderActivity
以便它可以检索它想要的项目(可能不是一个好的解决方案,因为章节太多)。
有没有更好的方法?
我会将列表数据放在 Application class(或另一个单例)中,然后 ReaderActivity 就可以为下一章查询它。实际上,它可以只获取下一章的详细信息并相应地更新其内容,根本不需要创建新的 activity。
有很多方法可以获得最好的。
其中一些:
使用您的 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();
使用 public 静态 getter 使您的列表成为静态成员,然后引用来自您的 ReaderActivity
public final ApplicationActivity extends Activity {
private static List<Chapter> chapters;
....
public static List<Chapter> getChapters() {
return chapters;
}
将列表存储在共享首选项中,以便任何 activity 都可以引用它
将章节列表包含在您的 intent extra 中并将其传递给您的 ReaderActivity
我认为您的 ReaderActivity
需要处理整本书而不是单个章节。这意味着方法 (4) 很可能是一个不错的选择。
我正在构建一本书 reader 应用程序,目前在如何转到下一章或上一章方面遇到一些问题。
负责显示章节列表的片段(基本上是一个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 个按钮可以移动到 next/previous 章节。如何从 ListView 获取数据(name
和 url
)?
目前我在想两种方法:
在
ReaderActivity
上调用finish()
并覆盖onDestroy()
方法以调用一个方法来获取保存片段中的 next/previous 数据列表显示。将整个 ArrayList 的章节传递给
ReaderActivity
以便它可以检索它想要的项目(可能不是一个好的解决方案,因为章节太多)。
有没有更好的方法?
我会将列表数据放在 Application class(或另一个单例)中,然后 ReaderActivity 就可以为下一章查询它。实际上,它可以只获取下一章的详细信息并相应地更新其内容,根本不需要创建新的 activity。
有很多方法可以获得最好的。
其中一些:
使用您的
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();
使用 public 静态 getter 使您的列表成为静态成员,然后引用来自您的
ReaderActivity
public final ApplicationActivity extends Activity { private static List<Chapter> chapters; .... public static List<Chapter> getChapters() { return chapters; }
将列表存储在共享首选项中,以便任何 activity 都可以引用它
将章节列表包含在您的 intent extra 中并将其传递给您的
ReaderActivity
我认为您的 ReaderActivity
需要处理整本书而不是单个章节。这意味着方法 (4) 很可能是一个不错的选择。