从活动返回清单到主要活动?

时间:2018-10-12 11:50:53

标签: android android-intent android-bundle

我希望MainActivity调用SecondActivity,而SecondActivity返回字符串列表。

我阅读的每个答案都说明了如何将数据从MainActivity传递到SecondActivity

我创建了一个活动,可以计算内部网络中所有可能的IP并将其保存在列表中。 我想将此列表传递给MainActivity。 您能建议我一些链接或代码来解决我的问题吗? 我是Android Studio的新手,但我必须这样做。 这是 MainActivity

中的代码段代码
 b1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    boolean check_conn = false;
                    check_conn = checkInternetConnection();//check if you are on internet

                    if (check_conn){
                        //we have connection
                        // find the all the possible IPs
                        Intent intent = new Intent(MainActivity.this, rangeIP_test.class);
                        startActivity(intent);
                    }
                    else {
                        // do something annoying
                        Toast.makeText(MainActivity.this,
                                "We need Internet Connection!", Toast.LENGTH_LONG).show();
                    }
                }
            });

用于计算IP的 rangeIP_test 活动

WifiManager my_wifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String subnet = getSubnetAddress(my_wifi.getDhcpInfo().gateway);
IPs = findIP(subnet);

public List<String> findIP(String subnet){
        List<String> all_IPs;// All IPs on network
        all_IPs = new ArrayList<>();

        for (int i=2; i<255; i++){
            String host = subnet + "." + i;

            all_IPs.add(host);
        }
        return all_IPs;
    }

3 个答案:

答案 0 :(得分:1)

您可以将列表直接传递给意向附加项

类似的东西

Intent intent = getIntent();  
intent.putStringArrayListExtra("test", (ArrayList<String>) all_IPs);

在另一项活动中,您可以像下面这样收到它

ArrayList<String> test = getIntent().getStringArrayListExtra("test");

答案 1 :(得分:1)

使用startActivityForResult和onActivityResult可能有效。

通过startActivityForResult()调用rangeIP_test活动 并通过setResult()返回您的列表。完成工作后,别忘了完成()。

答案 2 :(得分:1)

启动活动rangeIP_test,以得到如下结果(即主机字符串列表):

 Intent intent = new Intent(MainActivity.this, rangeIP_test.class);
 startActivityForResult(intent,RC_LIST_STRING);

MainActivity.java中将RC_LIST_STRING定义为这样的字段:

 private static final int RC_LIST_STRING = 10001;

像这样在MainActivity.java中覆盖onActivityResult()

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (requestCode == RC_LIST_STRING) {
            // Make sure the request was successful
            if (resultCode == RESULT_OK) {
               // get the list of strings here
               ArrayList<String> myHosts = (ArrayList<String>) data.getSerializableExtra("myHosts"); // key must be matching 
               // do operations on the list
            }
        }
    }

rangeIP_test.java中,成功获取所有主机并将它们添加到列表后,您可以将列表传递回开始当前活动(此处{{ 1}}):

MainActivity

现在,您已经完成了rangeIP_test的活动,回到了Intent intent = new Intent(); intent.putExtra("myHosts", (Serializable) IPs); setResult(RESULT_OK, intent); finish(); ,并且由于您已覆盖rangeIP_test,因此您将获得那里的主机列表。

请记住,在此示例中,您要将主机列表转换为序列化类型,并将其传递给先前的活动。由于StringArrayList已经实现了Serializable接口,因此您将不会获得任何MainActivity error。 但是,在围绕活动传递模型对象时,您需要首先使模型类实现onActivityResult()接口,然后再按上述步骤进行操作。

更好的方法是将模型类转换为 Parcelable ,然后在活动之间传递数据。有关更多信息,请参阅此link