gpt4 book ai didi

Android:嵌套的 tabactivities 不适用于 startActivityForResult

转载 作者:太空狗 更新时间:2023-10-29 12:57:51 24 4
gpt4 key购买 nike

当我将一个 TabActivity 嵌套在另一个 TabActivity 中时,从内部 tabactivity 调用 startActivityForResult 失败。新 Activity 开始,但我收到一条错误消息:

startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent 

当 Activity 返回时永远不会调用 onActivityResult。

重现代码如下。四个类,MyActivity 是主类,有两个选项卡,NestedTab 有三个选项卡,所有选项卡都包含 SimpleActivity 和一个调用 SimpleDialog 的按钮:

public class MyActivity extends TabActivity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Populate a couple of tabs
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab

// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, SimpleActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("simple").setIndicator("Simple")
.setContent(intent);
tabHost.addTab(spec);

// Repeat
intent = new Intent().setClass(this, NestedTab.class);
spec = tabHost.newTabSpec("nested").setIndicator("Nested tabs")
.setContent(intent);
tabHost.addTab(spec);

}
}

public class NestedTab extends TabActivity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab

// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent(this, SimpleActivity.class);

String tabs[]= {"One", "Two", "Three"};
for (String s : tabs)
{
intent.putExtra("name", s);
spec = tabHost.newTabSpec(s).setIndicator(s).setContent(intent);
tabHost.addTab(spec);
}


}

public class SimpleActivity extends Activity {
Button mBtn;
Context mCtx;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple);
mCtx = this;
mBtn = (Button) findViewById(R.id.btn);
mBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//To change body of implemented methods use File | Settings | File Templates.
startActivityForResult(new Intent(mCtx, SimpleDisplay.class), 1);
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); //To change body of overridden methods use File | Settings | File Templates.
Toast.makeText(this, "Activity finished", Toast.LENGTH_LONG).show();
}
}


public class SimpleDisplay extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView text = new TextView(this);
text.setText("Just hit back button");
setContentView(text);

}
}

无法粘贴 xml 文件,但主要与步骤 4 相同:http://developer.android.com/resources/tutorials/views/hello-tabwidget.html

简单的就是一个 TextView 和一个按钮。

感谢任何帮助。

最佳答案

尝试 SimpleActivity.this.startActivity((Activity) view.getContext()).startActivity 而不仅仅是 startActivity。您从 OnClickListener 而不是从您的 Activity 触发 Activity,否则会出现错误并且缺少对 Activity 的 onActivityResult 的回调.

编辑:啊,我错过了双嵌套位。当您在两个级别使用 Intent 双重嵌套 TabActivity 时,事情会变得很奇怪——查看 TabActivity 的源代码以了解那里发生了什么,您应该能够模拟它的行为,如果你真的想要。

总而言之,您的 onActivityResult 只会向下传播一个级别;如果您真的真的想创建一个基于 Intent 的子标签(而不是基于 Intent 的标签和普通的基于 View 的子标签),您需要让父(单嵌套)标签触发 Intent。为此,请尝试将您的单嵌套选项卡设置为具有类似 startActivityAndDispatchToChild 之类的方法,并使用 getParent().startActivityAndDispatchToChild 从子项中调用该方法。拥有该方法 startActivityForResult,并覆盖单嵌套选项卡上的 getActivityResult 方法,使用从子项返回的代码来确定要分派(dispatch)给哪个子项。使用该代码,调用 getLocalActivity().getActivity(whateverTag) 以分派(dispatch)到适当的子 Activity 。

但是不要那样做。只需让您的二级 Activity 使用基于 View 而不是基于 Intent 的内容;如果您真的想分 ionic 页面的功能,请编写自定义 ViewGroup 类来管理每个子选项卡的内容。

关于Android:嵌套的 tabactivities 不适用于 startActivityForResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369794/

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