我正在尝试从 android studio 中的 Intent 中获取结果。

在我的主要我开始一个 Activity 并使用 startActivityForResult(intent, 1)
然后我在 Activity 2 的 setResults() 中使用 get results in mainActivity

@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();
            }

在 Activity 1 的 fragment 中,我调用了一个新的 startActivityForResult(i, 2)
我如何让我的主要 Activity 获取 setResults()从 Activity 3?

Activity 3 是这样做的:
Intent deleteIntent = new Intent();
deleteIntent.putExtra("FNAME", first);
deleteIntent.putExtra("LNAME", last);
deleteIntent.putExtra("ID", num);
setResult(RESULT_OK, deleteIntent);
finish();

我正在尝试让我的主要 Activity 调用 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
    }
}

这是在 Activity 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然后完成;一个 Activity 只会从它通过 startActivityForResult 直接启动的 Activity 中接收结果。

    10-06 09:12