【问题标题】:How to return a result (startActivityForResult) from a Activity to TabHost Activity?如何将 Activity 的结果(startActivityForResult)返回到 TabHost Activity?
【发布时间】:2011-08-31 11:10:38
【问题描述】:

我的A类调用了一个startActivityForResult:A类是tabactivity的一个选项卡中的activitygroup

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

ClassB是一个普通activity,不在tabactivity中,它是单独的

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

但在 A 类中,onactivityResult 没有收到任何信息,也没有执行。如果我将 A 类从 tabactivity 中删除,我的应用程序就可以了。我已经阅读了

How to setResult() for a TabActivity which contains activity for tabs

How to return a result (startActivityForResult) from a TabHost Activity?

但没有解决我的问题,谁能给点建议,代码更好,谢谢

编辑: 我在 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");

【问题讨论】:

    标签: android


    【解决方案1】:

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

    【讨论】:

    • 我会尝试,但是当活动 b 结束时,您的代码可以更新我的用户界面
    • 您可以随时广播事件,例如 onPause。没有限制。
    • Intent intent = new Intent(this, ClassB.class); startActivityForResult(intent, "STRING");
    • 我有使用广播接收器,但无法得到任何东西,你可以看到我的新编辑
    • 谢谢,我添加了 updateImageFilter = new IntentFilter("ACTION_CHANGE_TAB"); updateImageBroadcastReceiver = 新的 UpdateImageBroadcastReceiver(); registerReceiver(updateImageBroadcastReceiver, updateImageFilter);也添加到 oncreat 就可以了
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢你给我一些建议,但是通过我可以得到值,但是如何更新ui,你知道在onactivityResult收到结果时,它可以更新ui,我不能再次启动活动类a
    【解决方案3】:

    如果没有源代码,我无法完全找到问题,但这可能是下一种情况

    1) tabhost 的根活动没有收到 onActivityResult。然后你应该在 TabHost 内的 Activity 中调用覆盖的 onActivityResult

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

    【讨论】:

    • 我发现焦点在tabactivity上,如何让A类的view得到焦点?
    • 例如,您可以为根活动设置 android:focusableInTouchMode="true" android:focusable="true"。但是你应该在标签切换期间请求焦点手册
    • 我使用了 Intent intent = new Intent(this, ClassB.class);linearlayout.requesFocus(); startActivityForResult(意图,“字符串”);线性布局是 a 类的一部分,但没有用
    • 这个技巧在我的应用程序中有效,但我在切换后设置了焦点。据我所知 requestFocus 不会立即设置它。首先尝试将编辑框放在您的活动中,并在调用活动 ClassB 之前将焦点放在那里。仅用于测试。
    • 您是否将 id 添加到可聚焦的线性布局中?
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多