2017-04-10 56 views
0

我有一個應用程序,用戶可以輸入一個數字並保存到listView。該應用程序分爲3個活動。 第一個活動是MainActivity,它執行其他操作。第二項活動是我輸入號碼並保存的地方。代碼如下從第一個活動到第三個活動將值傳遞到listview覆蓋舊值

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

您的適配器數據大小將會更改。

+0

完美的感謝,工作! – user993074

相關問題