【问题标题】:Getting text from previous activity and adding it another activities list view从以前的活动中获取文本并将其添加到另一个活动列表视图
【发布时间】:2015-06-30 11:33:17
【问题描述】:

如何在单击按钮时将项目动态添加到列表中?文本被添加到listView。目前它只将一项添加到列表视图中,当您尝试添加另一项时,它只会更改列表中已添加的项。

这是我的代码:

这是获取文本的活动 A 的点击按钮:

schedule.setOnClickListener(new OnClickListener() {

         public void onClick(View view) {

             AddSchedule();

             Intent i = new Intent(ScheduleActivity.this, MainActivity.class);
             String str = event_name.getText().toString();
             i.putExtra("myExtra", str);
             startActivity(i);

         }

     });

然后在活动 B 中,它从活动 B 中获取文本,但只添加了

最终的ListView listView = (ListView) findViewById(R.id.listView); 适配器 = 新 ArrayAdapter(this, android.R.layout.simple_list_item_1, list); listView.setAdapter(适配器);

    Intent i = getIntent();
    if (i.hasExtra("myExtra")) {
        list.add(i.getStringExtra("myExtra"));
        adapter.notifyDataSetChanged();
    }

【问题讨论】:

  • 请发布您的完整代码
  • 我刚刚编辑了代码以显示活动 A 和 B 中发生的情况。如果有帮助

标签: java android listview


【解决方案1】:

您只能在新活动列表中看到一项,因为该活动每次都是通过 startActivity(Intent) 创建的(我想)。所以每次打开Activity B,都是一个新的实例。数组列表为空。

您需要每次都跟踪在活动 A 中单击的项目并将整个列表发送到活动 B。 Activity B 应该在 Intent 中获取完整列表并创建 gui-list。

让您的班级实现ParcelableSerializable(更慢)。

【讨论】:

  • 不确定我是否理解,所以每次点击按钮时都需要与其他活动打包
【解决方案2】:

在活动 B 中,您应该包括以下内容:

@Override
public void onSaveInstanceState(Bundle out){
    super.onSaveInstanceState(out);
    out.putStringArrayList(key, list);
}

“key”是你在Activity的B成员变量中定义的final String。

这将确保您的列表在被销毁之前保存(有关更多信息,请阅读Activity Lifecycle。现在,您还需要在创建活动时恢复。您可以在onCreateView 中执行此操作,如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    //restore the contents of your list
    if (savedInstanceState!=null)
        list=savedInstanceState.getStringArrayList(key);

    /* initialize the adapter and set it to the list */

    //also add the new item from activity A
    Intent i = getIntent();
    if (i.hasExtra("myExtra")) {
        list.add(i.getStringExtra("myExtra"));
        adapter.notifyDataSetChanged();
    }
}

一般注意事项,您可以直接将项目添加到适配器,而不是添加到列表然后通知适配器。适配器会自动更新您的列表。

编辑:是的,您的列表应该是一个成员变量,因为它需要通过 2 种方法访问。

【讨论】:

  • 列表呢?这也是变量吗?
  • @user3461038 list 应该是一个成员变量,因为它需要通过 2 种方法访问。不要忘记初始化它!
猜你喜欢
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多