Android fragments 无法从本机库获取图像

Android fragments 无法从本机库获取图像,android-fragments,android-intent,android-activity,android-gallery,Android Fragments,Android Intent,Android Activity,Android Gallery,我创建了一个测试应用程序,以了解如何调用本机图库,选择图像并将其显示在imageView上 第一次测试 我有一个简单的设置。一个活动和一个片段位于该活动中,该活动具有buttoncalls gallery意图和所选图像的imageView。这很有效 第二次试验 通过向主活动添加另一个活动和选项卡主机,稍微更改了设置。这个新的空活动将是启动活动,它的唯一目的是切换到保存调用库意图的片段的主活动。在我从图库中选择图像之前,一切正常。一旦选择了图像,它就不会返回到“我的测试”应用程序。这就像一个奇怪的

我创建了一个测试应用程序,以了解如何调用本机图库,选择图像并将其显示在imageView上

第一次测试

我有一个简单的设置。一个活动和一个片段位于该活动中,该活动具有buttoncalls gallery意图和所选图像的imageView。这很有效

第二次试验

通过向主活动添加另一个活动和选项卡主机,稍微更改了设置。这个新的空活动将是启动活动,它的唯一目的是切换到保存调用库意图的片段的主活动。在我从图库中选择图像之前,一切正常。一旦选择了图像,它就不会返回到“我的测试”应用程序。这就像一个奇怪的软碰撞。Logcat不显示任何错误,因此故障排除有点困难。我还在OnActivityResult覆盖的每一行上放置了一个断点,但它们从未命中

我希望有人能解释这件事

SDK版本为23,构建工具版本为23.0.3

到目前为止,我得到的是:

Main 2活动定位活动

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        ActivityConfig.CreateActivity(MainActivity.class, this, true);
    }
如果您想知道CreateActivity的功能:

MainActivity我只使用tabhost上的第三个位置。那就是碎片所在的地方

@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

        tabHost.setup();

        tabHost.addTab(Tabs.CreateTab("T1", R.id.tabFrag2, tabHost));

        tabHost.addTab(Tabs.CreateTab("T2", R.id.tabFrag3, tabHost));

        tabHost.addTab(Tabs.CreateTab("T3", R.id.tabFrag, tabHost));

        tabHost.setCurrentTab(2);
    }
碎片


在多次跟踪一个错误之后,我注意到,在选择一个映像之后,它将返回到启动活动,但不是通过onCreate,或者它被activityresult覆盖。结果是这样的。我的结论是重新设计整个界面,只需要一个活动

@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

        tabHost.setup();

        tabHost.addTab(Tabs.CreateTab("T1", R.id.tabFrag2, tabHost));

        tabHost.addTab(Tabs.CreateTab("T2", R.id.tabFrag3, tabHost));

        tabHost.addTab(Tabs.CreateTab("T3", R.id.tabFrag, tabHost));

        tabHost.setCurrentTab(2);
    }
private ImageView imageView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        View view = inflater.inflate(R.layout.fragment_blank, container, false);

        Button button = (Button)view.findViewById(R.id.Btn);

        imageView = (ImageView)view.findViewById(R.id.Img);

        button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);

                intent.setType("image/*");

                startActivityForResult(intent, 100);
            }
        });

        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 100)
            imageView.setImageURI(data.getData());
    }