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
。它对您有用吗??或者你想让我把它保存在首选项中??