将第一个活动到第三个活动的值传递到列表视图会覆盖旧值

时间:2017-04-10 18:37:29

标签: java android listview

我有一个应用程序,用户可以在其中输入数字并保存到listView。该应用程序分为3个活动。 第一个活动是MainActivity,它执行其他操作。第二个活动是我输入一个数字并保存它。代码在

之下
public class HomeTeamScored extends Activity {

protected static EditText display;
protected static ArrayAdapter<String> adapter;
Button addButton;
CheckBox checkBox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rect_activity_home_goal_player);

    display = (EditText) findViewById(R.id.editText);
    addButton = (Button) findViewById(R.id.btn);
    checkBox = (CheckBox) findViewById(R.id.checkBox);

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);


    addButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String task = display.getText().toString();
            adapter.add(task);
            adapter.notifyDataSetChanged();
            SavePreferences();


            Intent i = new Intent(HomeTeamScored.this, MainActivity.class);
            startActivity(i);
            finish();
        }
    });
}

protected void SavePreferences() {
    // TODO Auto-generated method stub
    SharedPreferences data = getApplicationContext().getSharedPreferences("saveNumber", android.content.Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = data.edit();
    for (int i = 0; i < adapter.getCount(); ++i){
        // This assumes you only have the list items in the SharedPreferences.
        editor.putString(String.valueOf(i), adapter.getItem(i));
    }
    editor.commit();
}

}

在我的第三项活动中,我检索已保存的号码。

public class ScoreBoardOverview extends Activity {

ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rect_activity_score_board_overview);

    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
    lv = (ListView) findViewById(R.id.listView);

    adapter.notifyDataSetChanged();
    lv.setAdapter(adapter);
    loadPreferences();
}

protected void loadPreferences(){
    SharedPreferences data = getApplicationContext().getSharedPreferences("saveNumber", Context.MODE_PRIVATE);
    for (int i = 0;; ++i){
        final String str = data.getString(String.valueOf(i), "");
        if (!str.equals("")){
            adapter.add(str);
        } else {
            break; // Empty String means the default value was returned.
        }
    }
}

}

这一切都运行正常,它为listView添加了一个数字,但问题是它会覆盖旧值,而是应该添加第二行。

任何可以提供帮助的人?

1 个答案:

答案 0 :(得分:1)

adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);


    addButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            String task = display.getText().toString();
            adapter.add(task);
            adapter.notifyDataSetChanged();
            SavePreferences();


            Intent i = new Intent(HomeTeamScored.this, MainActivity.class);
            startActivity(i);
            finish();
        }
    });
}

每次调用第二个活动时,适配器项目大小将为0。如果你想添加第二或第三项,你应该写

protected void loadPreferences(){
    SharedPreferences data = getApplicationContext().getSharedPreferences("saveNumber", Context.MODE_PRIVATE);
    for (int i = 0;; ++i){
        final String str = data.getString(String.valueOf(i), "");
        if (!str.equals("")){
            adapter.add(str);
        } else {
            break; // Empty String means the default value was returned.
        }
    }
}
第二个活动中的

方法。并在此行之后致电loadPreferences()

adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);

您的适配器数据大小将被更改。