在活动中保存数组

时间:2012-01-13 13:31:39

标签: android

我有Activity名称是通过EditText框输入的,然后将其保存到Array,然后显示在ListView中,其中还有Button会显示在可以将其删除的位置。

添加了正确的名称后,他们会被Activity Button传递给下一个Intent,以填充String。在下一个Activity,有一个按钮,可以返回上一个Activity以添加更多名称或删除。

问题是当他们回到上一个ActivityArray为空,所以我需要一种方法来保存Array,即使剩下Activity也是如此

ArrayList<String> playerList = new ArrayList<String>();

要添加到Array的按钮位于以下位置:

Button confirm = (Button) findViewById(R.id.add);
confirm.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        EditText playername = (EditText) findViewById(R.id.userinput);
        playerList.add(playername.getText().toString());
        adapter.notifyDataSetChanged();
        playername.setText("");
    }
});

2 个答案:

答案 0 :(得分:4)

使用Bundle将您的数组保存在onSaveInstanceState(Bundle savedInstanceState)活动

  1. http://developer.android.com/reference/android/os/Bundle.html
  2. Saving Android Activity state using Save Instance State
  3. 更新

        @Override
    public void onSaveInstanceState(Bundle outState) {
      // Save UI state changes to the savedInstanceState.
      // This bundle will be passed to onCreate if the process is
      // killed and restarted.
        outState.putStringArrayList("Playlist", playerList );
    
       super.onSaveInstanceState(outState);
    
        }
    

    现在取值

        @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
      // Restore UI state from the savedInstanceState.
      // This bundle has also been passed to onCreate.
        playerList = savedInstanceState.getStringArrayList("Playlist");
    
    }
    

答案 1 :(得分:2)

使用Bundle(并不总是足够灵活)的替代方法是使用自定义应用程序类。您需要在清单(应用程序名称)中定义它

<application android:name="<package>.MyApplication" ..... />

像这样编写自定义类:

public class MyApplication extends Application {
    private List<String> data;

    public void storeData(List<String> data) {
        this.data = data;
    }

    public List<String> getData() {
        return data;
    }
}

这种方式的好处在于它允许您对方法,可以存储的数据类型等进行各种自定义。此外,您不需要在活动之间传递数据,它始终可用并且只要应用程序处于活动状态,它就不会丢失。

在任何活动中,您都可以使用以下方式保存数据:

final List<String> myData = new ArrayList<String>();
// ... populate myData ...
((MyApplication) getApplication()).storeData(myData);

当你需要它时:

((MyApplication) getApplication()).getData();

事实上,我通常会在自定义应用程序中输入我希望能够从多个活动中访问的所有内容。