如何从一个Activity返回结果(startActivityForResult)到TabHost Activity?

3

我的A类调用了startActivityForResult:A类是TabActivity中一个选项卡的ActivityGroup。

Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");

ClassB是一种常见的活动,不属于tabactivity,它是独立的。

Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();

在Class A中,onActivityResult没有收到任何内容,也没有执行。如果我将Class A放在TabActivity之外,我的应用程序就可以正常运行。我已经阅读了以下链接,但没有解决我的问题:如何为包含选项卡活动的TabActivity设置setResult()如何从TabHost Activity返回结果(startActivityForResult)。请问有人能给一些建议吗?最好附带代码,谢谢。
编辑: 在Class A中我添加了:
public class UpdateImageBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {

            Log.i("temp","34353");


        }
    }



    /* (non-Javadoc)
     * @see android.app.Activity#onPause()
     */
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        unregisterReceiver(updateImageBroadcastReceiver);

    }

    /* (non-Javadoc)
     * @see android.app.Activity#onResume()
     */
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        updateImageFilter = new IntentFilter("ACTION_CHANGE_TAB");
        updateImageBroadcastReceiver = new UpdateImageBroadcastReceiver();
        registerReceiver(updateImageBroadcastReceiver, updateImageFilter);


    }

在B类中:

   Intent intent = new Intent("ACTION_CHANGE_TAB");
                        intent.putExtra("path", f.getAbsolutePath());
                        sendBroadcast(intent);

                    //  FileListSelectActivity.this.setResult(RESULT_OK, intent);
                        finish();

但我无法打印:Log.i("temp","34353");

3个回答

1

不知道这是否是最好的方法,但目前我使用一个称为“内存”的类来在活动之间传递对象。

public class Memory {
    public static Object objectToPass = null;
}

谢谢你给了我一些建议,虽然我可以获取值,但是如何更新UI呢?你知道在onActivityResult中当接收到resultok时,它可以更新UI,但我不能再次启动class a的activity。 - pengwang

1
尝试使用广播接收器。您可以在活动B中覆盖onStop(),从活动B广播事件并在活动A中监听。

我会尝试,但是当活动B结束时,你的代码可以更新我的UI。 - pengwang
你可以随时广播事件,例如 onPause。没有任何限制。 - superM
意图 intent = new Intent(this, ClassB.class); startActivityForResult(intent, "STRING"); - pengwang
我已经使用广播接收器,但是无法获取任何内容,你可以看到我的新编辑。 - pengwang
谢谢,我添加了updateImageFilter = new IntentFilter("ACTION_CHANGE_TAB"); updateImageBroadcastReceiver = new UpdateImageBroadcastReceiver(); registerReceiver(updateImageBroadcastReceiver, updateImageFilter); 也添加到onCreate中,没问题。 - pengwang

1

没有源代码,我无法准确找到问题所在,但可能是以下情况之一:

1)Tabhost的根活动未收到onActivityResult。然后,您应该在TabHost内的Activity中调用重写的onActivityResult。

2)另一种情况:Tabhost内的Activity未收到onActivityResult。只有焦点活动才会接收ActivityGroup内部的任何操作。您应该将焦点放在其中的某个视图上,然后您将收到操作。


我发现焦点集中在TabActivity上,如何让A类的视图获得焦点? - pengwang
例如,您可以为根活动设置android:focusableInTouchMode="true" android:focusable="true"。但是在选项卡切换期间,您应该手动请求焦点。 - Henry Pootle
我使用了Intent intent = new Intent(this, ClassB.class); linearlayout.requestFocus(); startActivityForResult(intent, "STRING"); 该linearlayout是Class A的一部分,但没有用处。 - pengwang
这个技巧在我的应用中有效,但是我在切换后立即设置了焦点。据我所知,requestFocus不会立即设置它。首先尝试将editbox放置在您的活动中,并在调用activity ClassB之前将焦点放在那里。仅供测试。 - Henry Pootle
你是否给可聚焦的线性布局添加了ID? - Henry Pootle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接