Android 在活动中保存数组

Android 在活动中保存数组,android,Android,我有一个活动,允许用户输入姓名并保存。单击“添加按钮”后,名称将添加到数组中,并显示在列表视图中,其中包含删除名称的选项 我的问题是,如果用户离开活动,然后返回活动,数组和列表视图将被保存,因此无需再次输入所有名称。此时,活动离开,然后返回到数组和列表视图为空 正如您在底部看到的,我曾尝试使用onSaveInstanceState和onRestoreInstanceState但无法使它们正常工作。有人可以扩展此代码吗 ArrayList<String> playerList = ne

我有一个
活动
,允许用户输入姓名并保存。单击“添加
按钮”
后,名称将添加到
数组中,并显示在
列表视图中,其中包含删除名称的选项

我的问题是,如果用户离开
活动
,然后返回
活动
数组
列表视图
将被保存,因此无需再次输入所有名称。此时,
活动
离开,然后返回到
数组
列表视图
为空

正如您在底部看到的,我曾尝试使用
onSaveInstanceState
onRestoreInstanceState
但无法使它们正常工作。有人可以扩展此代码吗

ArrayList<String> playerList = new ArrayList<String>();
ListView employeeList;
ArrayAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addremove);

final MyAdapter adapter = new MyAdapter(this, R.layout.listview_content, playerList);
ListView employeeList = (ListView) findViewById(R.id.namelistview);
employeeList.setAdapter(adapter);



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("");

}});

Button play = (Button) findViewById(R.id.playnow);
play.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent( demo.AddRemove.this, demo.PasswActivity.class);
intent.putStringArrayListExtra("KEY", playerList);
startActivity(intent);

}});
}
class MyAdapter extends ArrayAdapter<String>{
    private OnClickListener listener; 
    public MyAdapter(Context context, int textViewResourceId, ArrayList<String> objects) {
        super(context, textViewResourceId, objects);
        listener = new OnClickListener(){
            public void onClick(View v){
            playerList.remove(v.getTag());
            notifyDataSetChanged();

            };
            };
            }


    public View getView(int position, View convertView, ViewGroup parent) {
        if( convertView== null ) convertView = getLayoutInflater().inflate(R.layout.listview_content, null);

        TextView myTextView1 = (TextView)convertView.findViewById(R.id.playername);
        myTextView1.setText(getItem(position)); 
        Button remove = (Button)convertView.findViewById(R.id.remove);
        remove.setTag(getItem(position));
        remove.setOnClickListener(listener);
        return convertView;
    }
}

 @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");


    }
ArrayList playerList=new ArrayList();
ListView员工列表;
阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.addremove);
final MyAdapter=新的MyAdapter(this,R.layout.listview\u content,playerList);
ListView employeeList=(ListView)findViewById(R.id.namelistview);
employeeList.setAdapter(适配器);
按钮确认=(按钮)findViewById(R.id.add);
confirm.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
EditText playername=(EditText)findViewById(R.id.userinput);
添加(playername.getText().toString());
adapter.notifyDataSetChanged();
playername.setText(“”);
}});
按钮播放=(按钮)findViewById(R.id.playnow);
play.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
Intent Intent=newintent(demo.AddRemove.this、demo.PasswActivity.class);
putStringArrayListExtra(“键”,playerList);
星触觉(意向);
}});
}
类MyAdapter扩展了ArrayAdapter{
私人监听;
公共MyAdapter(上下文上下文、int-textViewResourceId、ArrayList对象){
超级(上下文、textViewResourceId、对象);
listener=新的OnClickListener(){
公共void onClick(视图v){
playerList.remove(v.getTag());
notifyDataSetChanged();
};
};
}
公共视图getView(int位置、视图转换视图、视图组父视图){
如果(convertView==null)convertView=GetLayoutFlater().inflate(R.layout.listview_content,null);
TextView myTextView1=(TextView)convertView.findViewById(R.id.playername);
myTextView1.setText(getItem(position));
按钮移除=(按钮)convertView.findViewById(R.id.remove);
移除.setTag(getItem(位置));
remove.setOnClickListener(listener);
返回视图;
}
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
//将UI状态更改保存到savedInstanceState。
//如果进程被激活,则此捆绑包将传递给onCreate
//杀死并重新启动。
putStringArrayList(“播放列表”,playerList);
super.onSaveInstanceState(outState);}
@凌驾
RestoreInstanceState上的公共无效(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//从savedInstanceState还原UI状态。
//此捆绑包也已传递给onCreate。
playerList=savedInstanceState.getStringArrayList(“播放列表”);
}

}

您是否尝试过将您的玩家列表作为

 static

它将解决您的目的

您的意思是
onSaveInstanceState
onRestoreInstanceState
应该是
公共静态无效
?这只会抛出错误?private static ArrayList playerList=new ArrayList();我的意思是,如果你想在活动中保存它,请使用这个。它可以解决你的目的。在那之前,我会尝试你的代码,让你知道你的代码有什么问题。您是否尝试过将其保存在您自己的共享参考文件中好的,不,我以前从未真正使用过
sharedPreferences
。它对您有用吗??或者你想让我把它保存在首选项中??