Android Studio开发App:Fragment的使用:简易新闻浏览器

        Fragment依赖于Activity,不能独立存在。因此我们需要将Fragment添加至Activity中。添加Fragment的方式有两种,动态添加和静态添加。由于动态添加可以在Activity中添加不同的Fragment,更加灵活,因此我们选用动态添加的方式实现Fragment。碎片添加主要通过以下几个步骤实现:

  1. 在onCreate()方法中通过Intent获取传入的新闻标题和内容。
    String newsTitle = getIntent().getStringExtra("news_title");
    String newsContent = getIntent().getStringExtra("news_content");
  2. 创建待添加的碎片实例。
    NewsContentFragment newsContentFragment;
  3. 获取FragmentManager,在活动中可以直接调用getSupportFragmentManager()方法得到。其中news_content_fragment为fragment布局。然后调用findFragmentById()方法得到NewsContentFragment的实例。
    newsContentFragment = (NewsContentFragment) getSupportFragmentManager().findFra
    gmentById(R.id.news_content_fragment);
  4.  调用refresh()方法,并将新闻的标题和内容传入,显示数据。
    newsContentFragment.refresh(newsTitle,newsContent);
  5. Fragment可实现在自适应平板大屏幕和手机小屏幕两种不同的屏幕,而要实现上述效果需在onCreate方法红判断应调用双页界面还是单页界面。如果能找到news_content_layout布局,则为双页模式,如果不能找到,则为单页模式。
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (getActivity().findViewById(R.id.news_content_layout)!= null){
            // 可以找到 news_content_layout 布局时,为双页模式
            isTowPane = true;
        }else {
            // 找不到 news_content_layout 布局时,为单页模式
            isTowPane = false;
        }
    }

  6. 在NewsTitleFragment中新建一个内部类NewsAdapter来作为RecyclerView的适配器,把适配器写成内部类是为了直接访问NewsTitleFragment的变量。
    class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder>{}
  7. 建立两个activity_main布局文件,一个实现双页界面,一个实现单页界面,实现双页界面的文件中包含news_content_layout布局,实现单页界面中的文件中不包含。在res文件夹下面新建layout-sw600dp文件夹系统就在屏幕分辨率大于600的时候自动选择该文件夹下的文件,在文件架下面新建activity_main文件,这个文件即为双页界面的文件布局。

  8. 双页模式下我们同时引入了两个碎片,并将新闻内容的碎片放在了一个FrameLayout布局下,而这个布局的id正是news_content_layout,双页模式下,系统会自动选择该布局。
    <fragment
        android:id="@+id/news_title_fragment"
        android:name="com.example.myapplication.NewsTitleFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
    
    <FrameLayout
        android:id="@+id/news_content_layout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3">
    
    <fragment
        android:id="@+id/news_content_fragment"
        android:name="com.example.myapplication.NewsContentFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    </FrameLayout>

  9. 最终单页效果和双页显示效果如下所示:

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值