3

私には2つのアクティビティがあります。1つはピッカーアクティビティで、もう1つは選択肢のリストです。選択肢がクリックされると、データはピッカーアクティビティに返されます。

これらの2つのアクティビティはアクティビティグループの一部であり、アクティビティグループはTabHost内のTabSpecです。

ピッカーアクティビティが起動アクティビティである場合、すべてが正常に機能します。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ください。機能させるために、この回答を追加の変更 (および) で更新します。TabsActivityTabsActivity.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 に答える