2012-01-19 82 views
0

我有一个Activity,它让用户输入名称并保存它们。点击添加Button后,该名称将被添加到Array中,并显示在ListView中,并且可以选择删除名称。在活动中保存数组

我的问题是,我试图去那里,如果用户离开Activity然后回来给ActivityArrayListView将已保存的点,所以没有必要再次输入所有名称。此刻一旦Activity被留下,然后回到ArrayListView都是空的。

正如你可以看到在底部我已经尝试使用onSaveInstanceStateonRestoreInstanceState,但不能让他们的工作任何人都可以扩展此代码?

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


    } 

}

回答

1

你有没有尝试使你的playerList作为

static 

它会解决你的目的

+0

你意味着'onSaveInstanceState'和'onRestoreInstanceState'应该是'公共静态无效'?那只是抛出错误? – Matt

+0

private static ArrayList playerList = new ArrayList (); 我的意思是,如果你想保存在活动使用这个。它可以解决你的目的。直到那时我会尝试你的代码,并让你知道你的代码是什么概率。你有没有尝试将它保存在你自己的sharedPreferences文件 – AAnkit

+0

好吧,不,我从来没有真正使用过'sharedPreferences'。 – Matt