有没有办法刷新意图的价值?

时间:2012-03-12 13:50:09

标签: android arrays android-intent back

所以我有一个数组并在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;
            }
        }

谢谢。

2 个答案:

答案 0 :(得分:0)

如果希望保持同步,则需要在两个活动中的onPause()和onResume()中保存和恢复数据。

发布您的代码,将更容易为您提供有关如何实现这一目标的具体建议。

答案 1 :(得分:0)

如果您使用ArrayAdapter在列表视图中显示您的项目,那么您可能需要在修改IntentB中的数据后调用adapter.notifyDataSetChanged()或类似地找到一种方法来使列表视图中的数据无效,以便它是重绘。

如果上述问题无法解决您的问题,那么您可能需要按照Tim建议的方式按照Android应用生命周期保存和恢复数据。另请发布您的代码。

自发布代码以来更新:所以看起来你在Utils类中有辅助方法来处理从ArrayAdapter添加和删除书签。正如我之前提到的,在添加和删除数组中的项目之后,应该添加行adapter.notifyDataSetChanged()。

同样,当回到IntentA时,您可能正在重新初始化活动,因此将新的ArrayAdapter设置为列表,因此每次都清除它。我将在活动A中实现onSaveInstanceState和onRestoreInstanceState方法,以便Array在离开焦点时保持数据。