Java 移动到新活动并返回到上一个活动时保存字符串数组列表的内容

Java 移动到新活动并返回到上一个活动时保存字符串数组列表的内容,java,android,listview,android-arrayadapter,savestate,Java,Android,Listview,Android Arrayadapter,Savestate,我有一个带有3个图像按钮的主要活动。它们充当选项卡/类别,单击时会弹出3个不同的活动。我在主页选项卡上有一个列表视图,其中填充了网站的数据。该应用程序允许用户通过单击顶部的选项卡图标来浏览类别(这将启动一个新活动) 我在onSaveInstanceState中使用了.putStringArrayList(,),在onRestoreInstanceState中使用了.getStringArrayList() 我的问题是: 当我更新“主页”选项卡上的列表视图时,单击顶部的另一个选项卡以导航到新活动,

我有一个带有3个图像按钮的主要活动。它们充当选项卡/类别,单击时会弹出3个不同的活动。我在主页选项卡上有一个列表视图,其中填充了网站的数据。该应用程序允许用户通过单击顶部的选项卡图标来浏览类别(这将启动一个新活动)

我在onSaveInstanceState中使用了.putStringArrayList(,),在onRestoreInstanceState中使用了.getStringArrayList()

我的问题是:

当我更新“主页”选项卡上的列表视图时,单击顶部的另一个选项卡以导航到新活动,然后按“上一步”硬键返回“主页”选项卡活动,列表内容将保留

但是,如果我更新列表,导航到新选项卡(活动),然后通过单击主页图标/选项卡(而不是硬“后退”键)导航回主页活动,则列表内容将消失,必须重新加载

实际上,在我看来,即使用户感觉他要回到上一个选项卡,应用程序仍然假设它正在向前移动到该选项卡,并且那里的数据丢失了一些

我如何解决这个问题

谢谢

这是我的代码:

int headlinessize;
int linkssize;
ArrayList<String> headlines = new ArrayList<String>();
    ArrayList<String> links = new ArrayList<String>();
    private ArrayAdapter<String> adapter; 

@Override
 public void onSaveInstanceState(Bundle savedInstanceState) {


     savedInstanceState.putStringArrayList("headlines", headlines);
     savedInstanceState.putInt("headlinessize", headlinessize);
     savedInstanceState.putStringArrayList("urls", links);
     savedInstanceState.putInt("linkssize", linkssize);
     super.onSaveInstanceState(savedInstanceState);
 }

@SuppressWarnings("unchecked")
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_mainscreen);

    if (savedInstanceState!= null){
    headlines.addAll(savedInstanceState.getStringArrayList("headlines"));
    links.addAll(savedInstanceState.getStringArrayList("urls"));
    headlinessize=savedInstanceState.getInt("headlinessize");
    linkssize=savedInstanceState.getInt("linkssize");
    }
            .
            .
            .
           }
intheadlinessize;
int linkssize;
ArrayList headlines=新的ArrayList();
ArrayList links=新的ArrayList();
专用阵列适配器;
@凌驾
SaveInstanceState上的公共无效(Bundle savedInstanceState){
savedInstanceState.putStringArrayList(“标题”,标题);
savedInstanceState.putInt(“headlinessize”,headlinessize);
savedInstanceState.putStringArrayList(“URL”,链接);
savedInstanceState.putInt(“linkssize”,linkssize);
super.onSaveInstanceState(savedInstanceState);
}
@抑制警告(“未选中”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_主屏幕);
如果(savedInstanceState!=null){
headlines.addAll(savedInstanceState.getStringArrayList(“headlines”));
links.addAll(savedInstanceState.getStringArrayList(“URL”);
headlinessize=savedInstanceState.getInt(“headlinessize”);
linkssize=savedInstanceState.getInt(“linkssize”);
}
.
.
.
}

您应该使用应用程序的PersistentState(SharedReferences) 因此,让 在活动上使用onPause()方法,然后保存SharedReferences

SharedPreferences settings = getSharedPreferences("key", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.put....
然后onCreate检查SharedReferences.contains(“key”); 然后用

SharedPreferences settings = getSharedPreferences("key", MODE_PRIVATE);
settings.get...

在我看来,您应该为此使用内置的操作栏选项卡()。然后,您可以为每个选项卡使用片段,而不是活动,这使得保留状态更容易。是的!:)我想这样做。我是Android的初学者,不知道我必须升级SDK才能使用它。不管怎样,我是从这条路开始的,我想完成它!谢谢