3

我有两个活动,一个是选择器活动,另一个是选择列表。单击选项后,数据将返回到选择器活动。

这两个活动是活动组的一部分,活动组是 TabHost 内的 TabSpec。

Everything works fine when the picker Activity is the launch 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);
    }
}
4

4 回答 4

3

您是否考虑过在进行其他活动时不要在 onItemClick() 方法中调用 finish() 方法,因为它可以终止此活动,然后如果我们返回此活动,它将从 onCreate() 重新开始。

于 2012-11-06T05:57:40.473 回答
1

我在上面的评论中询问了您是如何从内部实例MyActivity化的,因为我认为您在运行. 所以在,而不是:SubActivityMyActivityGroupMyActivityGroupTabsActivityTabsActivity.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())更新这个答案以使其工作。

于 2012-11-04T16:40:47.337 回答
0

您需要使用给定的父标签主机启动 startChildActivityForResult,这适用于我的应用程序

样本:

Intent intent = new Intent(getParent(), childActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivityForResult("childActivity", intent, RESULT_OK);
于 2012-11-06T13:48:50.040 回答
0

startActivityForResult当我使用带有选项卡和 ActivityGroup的方法时,我遇到了和你一样的问题。

实际上的问题是,当您从那开始活动时,ActivityGroup您将不会ActivityResult在调用活动中收到,而是您将在父活动中获得结果,即。活动组。

尝试覆盖 的onActivityResult方法ActivityGroup并在那里打印结果,您将在那里得到响应。

于 2012-11-06T16:13:05.880 回答