【问题标题】:Android Navigate to nested fragment from other activityAndroid 从其他活动导航到嵌套片段
【发布时间】:2015-01-29 09:00:00
【问题描述】:

MainActivity 有 3 个标签页。作为片段实现的标签页。 在第 3 个 PersonalFragment 上也有选项卡(但在上面而不是下面)。

第三个标签是下载管理器。

如何从任何活动导航到嵌套的 DownloadManager?

我猜它应该是通过带有一些额外字符串的 Android Intent,例如

public class MainActivity

...

    public static void startDownloadManager(Context context) {
        Intent intent = new Intent(context, MainActivity.class);
        intent.putExtra(EXTRA_PAGE, PAGE_DOWNLOAD_MANAGER);
        context.startActivity(intent);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {
        String place = intent.getStringExtra(EXTRA_PAGE);
        if (place.equals(PAGE_DOWNLOAD_MANAGER)){
            openDownloadManager();
        }       
    }


    private void openDownloadManager() {
        // TODO Auto-generated method stub

    }

openDownloadManager() 中的 n 我会调用一些 PersonalFragment 方法,然后它会调用嵌套的 Fragment 方法... 是不是有办法了?

【问题讨论】:

    标签: android android-intent fragment


    【解决方案1】:

    假设您已经创建了正确的 xml 布局。现在在另一个 Fragment 托管的 ViewPager 中显示 Fragment 非常简单。

    父片段中的代码如下所示:

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_parent, container, false);
        }
    
        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
    
            ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
            mViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
        }
    
        public static class MyAdapter extends FragmentPagerAdapter {
    
            public MyAdapter(FragmentManager fm) {
                super(fm);
            }
    
            @Override
            public int getCount() {
                return 4;
            }
    
            @Override
            public Fragment getItem(int position) {
                Bundle args = new Bundle();
                args.putInt(TextViewFragment.POSITION_KEY, position);
                return TextViewFragment.newInstance(args);
            }
        }
    

    在实例化 FragmentPagerAdapter 时使用 Fragment.getChildFragmentManager() 很重要。另请注意,您不能对子 Fragment 使用 Fragment.setRetainInstance() ,否则会出现异常。

    源码可以在:https://github.com/marcoRS/nested-fragments

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多