所以我有一个数组并在IntentA中显示(使用listview)。然后我点击IntentA中的一个项目导航到IntentB。在intentB中,我修改了IntentA中使用的数组。当我回去时,阵列不会更新。
有没有办法解决这个问题?
这是代码
Intent A: Intent i = new Intent("com.my.package.MYBOOKMARKS");
startActivity(i);
String BookmarkList[] = Utils.getBookmarksArray();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView lv = getListView();
LayoutInflater inflater = getLayoutInflater();
View logo = inflater.inflate(R.layout.bookmarks,
(ViewGroup) findViewById(R.id.logo));
lv.addHeaderView(logo, null, false);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.menu, BookmarkList));
Intent B: @Override
public void onClick(View v){
if (BookmarkButton.isChecked()) {
Toast.makeText(AClass.this, "Added to bookmarks", Toast.LENGTH_SHORT).show();
Utils.setBookmarksArray("AValue");
checked = true;
} else {
Utils.removeFromBookmarksArray("AValue");
Toast.makeText(Aclass.this, "Removed from bookmarks", Toast.LENGTH_SHORT).show();
checked = false;
}
}
谢谢。
答案 0 :(得分:0)
如果希望保持同步,则需要在两个活动中的onPause()和onResume()中保存和恢复数据。
发布您的代码,将更容易为您提供有关如何实现这一目标的具体建议。
答案 1 :(得分:0)
如果您使用ArrayAdapter在列表视图中显示您的项目,那么您可能需要在修改IntentB中的数据后调用adapter.notifyDataSetChanged()或类似地找到一种方法来使列表视图中的数据无效,以便它是重绘。
如果上述问题无法解决您的问题,那么您可能需要按照Tim建议的方式按照Android应用生命周期保存和恢复数据。另请发布您的代码。
自发布代码以来更新:所以看起来你在Utils类中有辅助方法来处理从ArrayAdapter添加和删除书签。正如我之前提到的,在添加和删除数组中的项目之后,应该添加行adapter.notifyDataSetChanged()。
同样,当回到IntentA时,您可能正在重新初始化活动,因此将新的ArrayAdapter设置为列表,因此每次都清除它。我将在活动A中实现onSaveInstanceState和onRestoreInstanceState方法,以便Array在离开焦点时保持数据。