【问题标题】:Call Camera Service inside fragment, how to handle the callback?在fragment里面调用Camera Service,回调怎么处理?
【发布时间】:2015-04-17 14:16:34
【问题描述】:

通常调用相机我们使用如下代码:

startActivityForResult(intent, REQUEST_CAMERA);

启动相机服务。并使用 onActivityResult 获取返回的照片 uri。它在活动中运作良好。但是对于fragment,回调只在Main Activity中触发,而不是fragment,如何设置回调?

请注意,片段在 tabhost 内部并且在事务处理之后,所以我不能简单地 tabhostmanager().findviewbytag()

非常感谢

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("test1", "result2");
        super.onActivityResult(requestCode, resultCode, data);
}

更新:

The tabost
tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        tabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        tabHost.addTab(tabHost.newTabSpec("home").setIndicator("Home"),HomeFragment.class, null);

我使用片段事务,所以 findviewbyid/ 标签返回其他实例,谢谢

【问题讨论】:

  • 您将不得不处理主机活动中的回调。
  • 但我所有的变量都在片段内,例如我放置返回照片的图像视图。如何与之互动?谢谢
  • 最好有办法从宿主活动中回调你的片段。因此,在您的片段中,您需要调用 onActivityResult,然后在该调用中调用 super.onActivityResult(...)。这将使主机活动侦听回调。在您的主机活动中,将从调用中传递的数据传递回您的片段并进行处理。

标签: android android-fragments android-camera android-camera-intent


【解决方案1】:

您只需要处理活动中的回调,然后使用来自相机应用程序的数据调用您的片段。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CAMERA) {
        if (resultCode == RESULT_OK) {
            ((YourFragment)getFragmentManager().findFragmentById(R.id.layout_id)).yourFragmentMethodToHandleDataFromCamera(data);
        }
    }
} 

查看 FragmentTabHost 类的源代码,以便找到一种方法来获取对片段的引用,因为它的标签。 https://code.google.com/p/android/issues/attachmentText?id=40035&aid=400350000000&name=FragmentTabHost.java&token=WHVg3x7dbNNznLcPPSwWxnin_X0%3A1367343846708

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 2019-06-02
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多