在我的应用程序中,我有3个活动A,B和C.在活动A中按下按钮时,它启动活动B,并使用putExtra将空的arraylist传递给它。在活动B中,如果arraylist为空,则启动Activity C,它在ArrayList中添加一个项目并将其传递给Activity B.然后显示Activity B和arraylist。在活动B中有一个“后退”按钮,当按下时会重新启动活动A.在活动A中,显示arraylist中的项目数,当按下EditText时,启动活动B.活动B现在显示项目中的项目。 ArrayList,因为ArrayList不为空。这很好但有些奇怪的事情发生了。当在ArrayList中显示项目时,先前的项目将以某种方式再次添加。如果ArrayList有1个项目,它可以正常工作。但是当添加2个或更多时,某些项目会被添加多次,并且可以是任意随机数。当我在活动A和B之间旅行时,大小不断增加。
以下是我的代码的一部分: 在活动A:
此处活动B在单击按钮btn_rec时启动。
btn_rec = (ImageButton) findViewById(R.id.btn_rec);
btn_rec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent rec_Intent = new Intent(FlipCardActivity.this,
RecipientsActivity.class);
rec_Intent.putExtra("RecArray", RecipientArray);
startActivityForResult(rec_Intent, NO_OF_RECIPIENTS);
}
});
EditText显示ArrayList中的项目数,单击时启动活动B.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == NO_OF_RECIPIENTS && resultCode == RESULT_OK) {
RecipientArray = (ArrayList<Person>) data.getSerializableExtra("RecArray");
if (RecipientArray.size() > 0) {
edt_rec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Log.e("In edt onclick", "Hello");
if (RecipientArray.size() == 0) {
Intent new_rec_Intent = new Intent(
FlipCardActivity.this,
RecipientAddressActivity.class);
startActivity(new_rec_Intent);
} else {
Intent rec_Intent = new Intent(
FlipCardActivity.this,
RecipientsActivity.class);
rec_Intent.putExtra("RecArray", RecipientArray);
startActivityForResult(rec_Intent, NO_OF_RECIPIENTS);
}
}
});
}
}
}
当ArrayList的大小为&gt; 0时,EditText启动活动B,否则启动活动C. 在活动B中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RecipientArray = (ArrayList<Person>) getIntent().getSerializableExtra(
"RecArray");
Log.e("Recipient Array", "size = " + RecipientArray.size());
if (RecipientArray.size() == 0) {
Intent rec_addr_Intent = new Intent(RecipientsActivity.this,
RecipientAddressActivity.class);
rec_addr_Intent.putExtra("RecArray", RecipientArray);
startActivityForResult(rec_addr_Intent, REC_INFO);
} else {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
int size = prefs.getInt("size", 0);
for (int i = 0; i < size; i++) {
String json = prefs.getString("RecList_" + i, "");
Gson gson = new Gson();
Person p = gson.fromJson(json, Person.class);
RecipientArray.add(p);
}
// Log.e("RecListActivity","Size of arraylist"+RecipientArray.size());
this.m_adapter = new CustomListAdapter(RecipientsActivity.this,
R.layout.recipients_list, RecipientArray);
}
setContentView(R.layout.activity_recipients);
list = (ListView) findViewById(R.id.rec_list);
list.setAdapter(m_adapter);
addListenerForButtons();
}
protected void onPause() {
super.onPause();
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Editor editor = prefs.edit();
Gson gson = new Gson();
// String json = gson.toJson(RecipientArray);
for (int i = 0; i < RecipientArray.size(); i++) {
String json = gson.toJson(RecipientArray.get(i));
editor.putString("RecList_" + i, json);
editor.putInt("size", i);
}
editor.apply();
}
在onPause中保存ArrayList的值。
ArrayList是'RecipientArray',其中包含'Person'类型的对象。 请帮助我尽快解决这个问题。如果需要更多详细信息,请告诉我。
答案 0 :(得分:0)
之前的评论:
您不应在变量名称的开头使用大写字母。这很令人困惑,因为它看起来像一个类名,而且它可能会让你遇到麻烦。您应该在任何地方将RecipientArray重命名为recipientArray。
让我们解决您的问题。
我不确定我是否理解您的代码,但我能看到的内容(请查看我的代码:)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//here you retrieve the array coming from Activity A
RecipientArray = (ArrayList<Person>) getIntent().getSerializableExtra(
"RecArray");
if (RecipientArray.size() == 0) {
///...
} else {
//here, you add to the array, all the preferences from the array
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
int size = prefs.getInt("size", 0);
for (int i = 0; i < size; i++) {
String json = prefs.getString("RecList_" + i, "");
Gson gson = new Gson();
Person p = gson.fromJson(json, Person.class);
RecipientArray.add(p);
}
// ...
}
}
//here, when the activity is going to be closed, you save all the items in the array to the sharedpreferences
protected void onPause() {
super.onPause();
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Editor editor = prefs.edit();
Gson gson = new Gson();
// String json = gson.toJson(RecipientArray);
for (int i = 0; i < RecipientArray.size(); i++) {
String json = gson.toJson(RecipientArray.get(i));
editor.putString("RecList_" + i, json);
editor.putInt("size", i);
}
editor.apply();
}
所以你在做什么,
所以考虑一下你需要什么,可能你不必在A和B之间传递数组,或者你不必将它保存到共享首选项,或者你必须检查你保存了哪些项目。考虑一下你真正需要的是什么,问题出在那些方面