gpt4 book ai didi

android - 如何处理来自多个 Activity 的 getResults?

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:29 26 4
gpt4 key购买 nike

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

在我的 main 中,我开始一个 Activity 并使用 startActivityForResult(intent, 1)

然后我在 mainActivity 中使用 Activity 2 的 setResults()

获取结果
@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();
}
}

最佳答案

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

  1. Activity1 为结果启动 Activity2
  2. Activity2 为结果启动 Activity3
  3. Activity3 返回一个结果
  4. Activity1 预计会收到 Activity3 的结果。

如果我没听错,那么这里似乎缺少的关键要素是您期望 Activity1 从 Activity3 获得结果,即使是 Activity2 启动它以获得结果。在这种情况下,您应该在 Activity2 中实现 onActivityResult,处理 Activity3 返回的结果并将其设置为 Activity2 的结果传回 Activity1,然后完成; Activity 将仅接收它通过 startActivityForResult 直接启动的 Activity 的结果。

关于android - 如何处理来自多个 Activity 的 getResults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41194885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com