ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 如何处理来自多个活动的getResults?

2019-08-23 23:25:34  阅读:92  来源: 互联网

标签:android android-intent


我试图从android studio的意图中获得结果.

在我的主要内容中,我启动一个活动并使用startActivityForResult(intent,1)

然后我在活动2的setResults()中使用mainActivity中的get结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            Bundle extras = data.getExtras();
            if (extras != null) {
                String name = extras.getString("FIRSTNAME");
                String Lname = extras.getString("LASTNAME");
                int ID = extras.getInt("ID");

                //TODO: Get the list fragment to newinstance with out new arraylist

                Person p = new Person(name, Lname, ID);
                people.add(p);
                getFragmentManager().beginTransaction().replace(R.id.content_main, FullList.newInstance(people)).commit();
            }

在我的活动1中的片段中,我正在调用一个新的startActivityForResult(i,2)

如何让我的主要活动获取setResults()
活动3?

活动3正在这样做:

Intent deleteIntent = new Intent();
deleteIntent.putExtra("FNAME", first);
deleteIntent.putExtra("LNAME", last);
deleteIntent.putExtra("ID", num);
setResult(RESULT_OK, deleteIntent);
finish();

我试图让我的主要活动调用if(requestCode == 2)

但它无济于事.

以下是所有onActivityResult供参考:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            Bundle extras = data.getExtras();
            if (extras != null) {
                String name = extras.getString("FIRSTNAME");
                String Lname = extras.getString("LASTNAME");
                int ID = extras.getInt("ID");

                //TODO: Get the list fragment to newinstance with out new arraylist

                Person p = new Person(name, Lname, ID);
                people.add(p);

                getFragmentManager().beginTransaction().replace(R.id.content_main, FullList.newInstance(people)).commit();
            }

            // NOW SEEING IF THE DETAILS SCREEN PASSED BACK RESULTS

        } else if (requestCode == 2) {
            if (resultCode == RESULT_OK) {
                Bundle extras = data.getExtras();
                if (extras != null) {
                    String name = extras.getString("FNAME");
                    String Lname = extras.getString("LNAME");
                    int ID = extras.getInt("ID");

                    Person p = new Person(name, Lname, ID);
                    // Delete happens here //
                    if (people.contains(p)) {
                        people.remove(p);
                        // If empty show blank frag, if not, update list //
                        if (people.isEmpty()) {
                            getFragmentManager().beginTransaction().replace(R.id.content_main, BlankList.newInstance());
                        } else {
                            getFragmentManager().beginTransaction().replace(R.id.content_main, FullList.newInstance(people)).commit();
                        }

                    } else {
                        Toast.makeText(this, "DIDNT RECEIVE SAME INFO", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        }
        // END ELSE CHECK
    }
}

下面是在活动1的Fragment中调用startActivityForResult()的代码.

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    //super.onListItemClick(l, v, position, id);

    ArrayList<Person> people = (ArrayList<Person>) getArguments().getSerializable(ARG_People);

    if (people != null && position != -1) {
        Person listPerson = people.get(position);
        Intent i = new Intent("OPENDETAILS");
        i.putExtra("NAME", listPerson.name);
        i.putExtra("LASTNAME", listPerson.lName);
        i.putExtra("ID", listPerson.ID);
        startActivityForResult(i, 2);
    } else {
        Toast.makeText(getActivity(), "EMPTY LIST ERROR", Toast.LENGTH_SHORT).show();
    }
}

解决方法:

有点不清楚你要做什么,但听起来像是:

> Activity1为结果启动Activity2
> Activity2为结果启动Activity3
> Activity3返回结果
> Activity1预计会收到Activity3的结果.

如果我做对了,那么这里似乎缺少的关键元素就是你期望Activity1从Activity3获得一个结果,即使它是Activity2为结果启动它.在这种情况下,您应该在Activity2中实现onActivityResult,处理从Activity3返回的结果并将它们设置为Activity2的结果以传递回Activity1然后完成;活动仅接收通过startActivityForResult直接启动的活动的结果.

标签:android,android-intent
来源: https://codeday.me/bug/20190823/1702044.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有