如何使用ListView的上一个或下一个位置的数据重新启动活动

时间:2015-07-02 02:08:34

标签: android listview restart

我正在构建一个图书阅读器应用程序,目前在如何转到下一章或上一章方面存在一些问题。

负责显示章节列表的片段(基本上是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获取数据(nameurl)?

目前我正在考虑两种方法:

  1. finish()上调用ReaderActivity并覆盖onDestroy()方法以调用方法来获取包含ListView的片段中的下一个/上一个数据。

  2. 将章节的整个ArrayList传递给ReaderActivity,以便它可以检索它想要的项目(可能不是一个好的解决方案,因为章节太多了。)

  3. 有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

我会将列表数据放在Application类(或其他单例)中,然后ReaderActivity就可以查询它以供下一章使用。实际上它可以获得下一章的细节并相应地更新其内容,而不需要创建新的活动。

答案 1 :(得分:0)

有很多方法可以获得最好的方法。

其中一些:

  1. 使用您的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();
    
  2. 使用公共静态getter将列表设为静态成员,然后引用来自ReaderActivity

    public final ApplicationActivity extends Activity {
        private static List<Chapter> chapters;
    
        ....
    
        public static List<Chapter> getChapters() {
            return chapters;
    }
    
  3. 将列表存储在共享首选项中,以便任何活动都可以引用它

  4. 在意向书中加入章节列表并将其传递给ReaderActivity

  5. 我认为你的ReaderActivity需要处理整本书而不是一章。这意味着方法(4)很可能是一个好的候选人。