栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

fragement 完成 简易版本的新闻页面

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

fragement 完成 简易版本的新闻页面

fragement 完成 简易版本的新闻页面
  • 显示效果
  • 手机页面显示流程(单页面,显示新闻标题,点击跳转到内容)
  • 平板页面显示流程 (双页面,同时显示新闻标题以及内容)
  • 整体流程

显示效果



手机页面显示流程(单页面,显示新闻标题,点击跳转到内容)

主Activity对应的XML文件在 layout文件夹下面。

平板页面显示流程 (双页面,同时显示新闻标题以及内容)

主Activity对应的XML文件在layout-sw600dp文件夹下面

整体流程
  1. 首先加载主Activity,与之对应的XML文件里面加入静态fragement片段,用来显示新闻的标题。

单页面:


    

双页面:



    

    
        
    


2.编写NewsTitleFragement ,继承Fragement(暂时先不写)。编写该NewsTitleFragement对应的XML文件。


    

  1. NewsContentFragement 编写 以及 对应XML文件。
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.ListFragment;


public class NewsContentFragement extends Fragment {

    private View view;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.news_content_frag, container, false);
        return view;
    }


    public void refresh(String newsTitle, String newsContent) {
        View visibilityLayout = view.findViewById(R.id.news_content_layout);
        visibilityLayout.setVisibility(View.VISIBLE);
        TextView newsTitleText = view.findViewById(R.id.news_title);
        TextView newsContentText = view.findViewById(R.id.news_content);
        newsTitleText.setText(newsTitle);    //  刷新 新闻 的标题
        newsContentText.setText(newsContent);   //  刷新 新闻的内容

    }


}




    

        
        

        
    

    


4.在NewsTitleFragement 中解析对应的XML文件,获取里面的recyclerView,为该recyclerView设置布局管理器以及添加适配器。根据当前activity里面组件id来判断是单页面还是双页面,如果 是 单页面 模式 就 直接传递数据然后 打开 NewsContentActivity(对应的XML文件里面绑定了静态的NewsContentFragement片段,用来显示内容,NewsContentFragement片段对应的XML文件是news_content_frag),如果 是 双页面 模式 更新 NewsContentFragement中的内容。

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class NewsTitleFragement  extends Fragment {

    private boolean isTwoPane;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.news_title_frag,container,false);
        RecyclerView recyclerView  = view.findViewById(R.id.recyclerView);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(linearLayoutManager);
        NewsAdapter adapter = new NewsAdapter(getNews());
        recyclerView.setAdapter(adapter);
        return view;
    }

    private List getNews() {
        ArrayList list = new ArrayList<>();
        for (int i = 0; i <= 50; i++) {
            News news = new News();
            news.setTitle("   This is news title "+i);
            news.setContent("This is news content"+i+". ");
            list.add(news);
        }
        return list;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (getActivity().findViewById(R.id.news_content) != null){
            isTwoPane = true;      //  是  双页面 模式
        }else {
            isTwoPane = false;    //  单页面 模式
        }
    }

    class NewsAdapter extends RecyclerView.Adapter{

        private List mNewsList;

        public NewsAdapter(List mNewsList) {
            this.mNewsList = mNewsList;
        }

        class ViewHolder extends RecyclerView.ViewHolder{

            TextView newsTitleText;

            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                newsTitleText = itemView.findViewById(R.id.news_title);
            }
        }

        @NonNull
        @Override
        public NewsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
          View view =  LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);
        final RecyclerView.ViewHolder holder  = new ViewHolder(view);
        view.setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View v) {
                News news = mNewsList.get(holder.getAdapterPosition());
                if (isTwoPane){
                    //  如果 是  双页面 模式  更新  NewsContentFragement中的内容
                    NewsContentFragement  newsContentFragement =(NewsContentFragement) getFragmentManager().findFragmentById(R.id.news_content_fragement);
                newsContentFragement.refresh(news.getTitle(),news.getContent());
                }else{
                    //  如果 是  单页面 模式 就 直接 打开 NewsContentActivity
                    NewsContentActivity.actionStart(getActivity(),news.getTitle(),news.getContent());
                }
            }
        });
        return (ViewHolder) holder;
        }

        @Override
        public void onBindViewHolder(@NonNull NewsAdapter.ViewHolder holder, int position) {
            News news = mNewsList.get(position);
            holder.newsTitleText.setText(news.getTitle());
        }

        @Override
        public int getItemCount() {
            return mNewsList.size();
        }
    }
}

NewsContentActivity对应的XML文件



    


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号