Android:将数据从一个活动传递到ListView中的另一个活动

时间:2014-09-03 04:00:39

标签: android listview android-intent

我正在制作一个Grocery列表应用程序。

在我的第一个Activity我有一个ListView,在我的第二个活动中,我可以添加新的杂货详情。我想在第一个Activity' s ListView中显示这些详细信息。现在,我如何将数据从第二个Activity传递到Activity中的第一个ListView

在第二个活动中,我使用愚蠢的代码传递数据:

            EditText editName = (EditText) findViewById(R.id.txtName);
             EditText editQty=(EditText) findViewById(R.id.txtqty);
             String name= editName.getText().toString();
             String quantity=editQty.getText().toString();
             Intent returnIntent = new Intent();
             returnIntent.putExtra("name",name);
             returnIntent.putExtra("quantity",quantity);
             setResult(RESULT_OK,returnIntent);
             finish();

在第一项活动中,我使用了Intent,如下所示:

           protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                Bundle b = data.getExtras();
                if ( b!= null ){
                String strName=data.getStringExtra("name");
                String strQty=data.getStringExtra("quantity");
                System.out.println(strName);
                System.out.println(strQty);

                }
            }
            if (resultCode == RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }

请帮我解决这个问题。提前谢谢。

3 个答案:

答案 0 :(得分:0)

我建议你使用SQLite来解决你的问题,当你插入新的杂货店细节时,只需创建一个表并在数据库表中插入这些细节。现在,当你想显示新添加的细节时,只需运行"选择"查询并设置ListView适配器。

如果每次都不想设置适配器,那么只需维护一个类似于isGroceryAdded的布尔静态变量。如果杂货店细节成功添加,那么在那个时候制作布尔变量" true"。并检查变量为true的第一个活动,然后再次运行查询并再次设置适配器,设置适配器后,再次将该变量设为false。

答案 1 :(得分:0)

如果没有一些代码,我的建议是创建一个实现serializable的模型类,将其作为结果放入intent中并将其传递回第一个Activity(注意为此工作,第二个activity必须是以startActivityForResult()开头。

有关类似问题,请查看https://stackoverflow.com/a/14333555/1082942

答案 2 :(得分:0)

这是一个在大多数情况下应该有效的解决方案的概述。考虑到您没有提供特定于您情况的代码,这可能是您可能需要的,也可能不是。

1)要恢复第一个活动,请将第二个活动的意图发送到包含杂货详细信息的第一个活动作为意图附加(键值对)。

2)覆盖第一个活动的onResume()方法来处理传入的意图以提取所需的数据。

3)然后,您需要使用此意图附加信息更新适配器使用的数据。

4)然后你需要在你的适配器上调用notifyDataSetChanged(),这样它就会用更新的信息重新创建它的视图

希望您觉得这很有帮助。