我有两个活动,一个是选择器活动,另一个是选择列表。单击选项后,数据将返回到选取器活动。
这两个活动是活动组的一部分,活动组是TabHost中的TabSpec。
当选择器Activity是启动活动时,一切正常。当ActivityGroup是启动活动时,它也可以正常工作。当TabHost是启动活动时,它不起作用(但没有错误)。是否有一些Intent标志或getParent()我需要做才能让它工作?
public class MyActivity extends Activity {
static final int MY_REQUEST = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_picker);
Button button = (Button) findViewById(R.id.my_button);
button.setOnClickListener(buttonOnClickListener);
}
private OnClickListener buttonOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MyActivity.this, SubActivity.class);
startActivityForResult(inent, MY_REQUEST);
}
};
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_REQUEST) {
if (resultCode == RESULT_OK) {
String item = data.getStringExtra("item");
//do something
}
}
if (resultCode == RESULT_CANCELED) {
}
}
}
public class SubActivity extends Activity {
private ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_sublayout);
ListView listView = (ListView) findViewById(R.id.list);
String[] items = {"red", "blue", "black", "green"};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, items);
listView.setAdapter(adapter);
listView.setOnItemClickListener(listOnItemClickListener);
}
private OnItemClickListener listOnItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent();
String item = adapter.getItem(position);
intent.putExtra("item", item);
setResult(RESULT_OK, intent);
finish();
}
};
}
在选项卡中启动活动的代码是相当标准的,但现在是:
public class TabsActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabs);
TabHost tabHost = getTabHost();
Intent intent= new Intent().setClass(this, MyActivityGroup.class);
TabSpec tabSpecMyActivity = tabHost
.newTabSpec(getString(R.string.my_title))
.setIndicator(getString(R.string.my_title))
.setContent(intent);
tabHost.addTab(tabSpecMyActivity );
tabHost.setCurrentTab(0);
}
}
答案 0 :(得分:3)
你有没有考虑过去onItemClick()方法中调用finish()方法而去其他活动,因为它可以终止这个活动然后如果我们回到这个活动,它将从onCreate()重新开始。
答案 1 :(得分:1)
我在上面的评论中询问您是如何从MyActivity
中实例化SubActivity
和MyActivityGroup
的,因为我认为您确实不需要使用MyActivityGroup
运行你的TabsActivity
。所以在TabsActivity.onCreate()
中,而不是:
Intent intent = new Intent().setClass(this, MyActivityGroup.class);
你可以这样做:
Intent intent = new Intent().setClass(this, MyActivity.class);
通过上述更改,您的MyActivity.onActivityResult()
应按预期调用。
如果您确实需要在MyActivityGroup
内加TabsActivity
,请与我们联系,我会更新此答案并进行其他修改(在TabsActivity.onActivityResult()
和MyActivityGroup.startActivityFromChild()
中)它有效。
答案 2 :(得分:0)
您需要使用给定父级tabhost启动startChildActivityForResult,这适用于我的应用程序
样品:
Intent intent = new Intent(getParent(), childActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivityForResult("childActivity", intent, RESULT_OK);
答案 3 :(得分:0)
当我使用带有标签和ActivityGroup的startActivityForResult
方法时,我遇到了类似的问题。
实际上问题是,当您从ActivityGroup
开始活动时,您将不会在调用活动中收到ActivityResult
,而是您将在父活动中获得结果,即。的ActivityGroup。
尝试覆盖onActivityResult
的{{1}}方法并在那里打印结果,您将在那里获得响应。