zoukankan      html  css  js  c++  java
  • Android--完成新闻界面(单屏幕+双屏)

    流程图

    (1)新建一个项目

    (2)添加依赖库

    (3)准备News

    (4)新建新闻内容布局

    (5)新建展示新闻内容的碎片

    (6)新建活动布局文件引入之前的碎片布局

    (7)修改活动代码

    (8)创建用于显示新闻题目列表文件

    (9)创建RecycleView布局和其子布局

    (10)新建单页和双页布局

    (11)新建内部类用作RecycleView适配器

    (12)RecycView中填充数据

    2News布局

    编写News的布局文件News_content_layout.xml

    3)编写News

     

    public class News {
        private String headline;
        private String content_top;
        private String content_buttom;
        private int src;
        public String getHeadline(){
            return headline;
        }
        public String getContent_top(){
            return content_top;
        }
        public String getContent_buttom(){
            return content_buttom;
        }
        public int getSrc(){return src;}
        public void setHeadline(String headline){
            this.headline = headline;
        }
        public void setContent_buttom(String content_buttom){
            this.content_buttom = content_buttom;
        }
        public void setContent_top(String content_top){
            this.content_top = content_top;
        }
        public void setSrc(int src){this.src = src;}
    }

    主要包括News标题和内容以及图片获取与设置

    4)创建使用News_content_layout.xml布局的碎片类NewsContentFragment

    public class NewsContentFragment extends Fragment{
        private View view;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.news_content_layout,container,false);
            return view;
        }
        public void refrech(String News_headline_text,String News_content_top_text,String News_content_bottom_text,int src){
            View news_content_fragment = view.findViewById(R.id.invistiable_view);
            news_content_fragment.setVisibility(View.VISIBLE);
            TextView News_headline = (TextView) view.findViewById(R.id.news_headline);
            TextView News_content_top = (TextView) view.findViewById(R.id.news_content_top);
            TextView News_content_buttom = (TextView) view.findViewById(R.id.news_content_bottom);
            ImageView img = (ImageView) view.findViewById(R.id.news_image);
            News_headline.setText(News_headline_text);
            News_content_top.setText(News_content_top_text);
            News_content_buttom.setText(News_content_bottom_text);
            img.setImageResource(src);
        }
    }

    其中方法的作用是载入News的内容布局,和刷新布局中文本数据以及图像数据的内容。

    5)创建新闻索引栏布局

    使用RecycleView布局创建索引栏布局,

    并添加子布局文件,以及实现News_item适配器。

    (2)创建新闻索引碎片类

    这个类的主要作用是加载新闻索引布局,以及在该类实现一个子项的适配器,将内容显示。

    7)创建一个NewsContentActivity用于展示单屏幕的新闻内容它的布局文件是activity_news_content。通过点击实践创建显示。

    public class NewsContentActivity extends AppCompatActivity {

        public static void actionStart(Context context,String Headline,String newsContest_top,String newsContest_buttom,int src){
            Intent intent = new Intent(context,NewsContentActivity.class);
            intent.putExtra("news_headline",Headline);
            intent.putExtra("news_Context_top",newsContest_top);
            intent.putExtra("news_Context_buttom",newsContest_buttom);
            intent.putExtra("src",src+"");
            context.startActivity(intent);
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_news_content);
            String news_headline = getIntent().getStringExtra("news_headline");
            String news_Context_top = getIntent().getStringExtra("news_Context_top");
            String news_Context_buttom = getIntent().getStringExtra("news_Context_buttom");
            String str = getIntent().getStringExtra("src");
            int src=Integer.parseInt(str);
            NewsContentFragment newsContentFragment= (NewsContentFragment) getSupportFragmentManager().findFragmentById(R.id.content_activity_fragment);
            newsContentFragment.refrech(news_headline,news_Context_top,news_Context_buttom,src);
        }


    }

    所以应该在点击单页的目录子项的时候,在创建新的Activity之前实现数据传输。

    通过getIntent().getStringExtra()方法获得数据,使用getSupportFragmentManager().findFragmentById()方法获得要使用的fragment,并调用刷新函数载入数据。

    (8) 创建在res下创建layout-land文件夹并创建双页的main_activtiy.xml文件

    可以使用LinearLayout把两个碎片嵌入到main_activity.xml文件。因为要替换右边的部分,所以需要用FrameLayout来装右边的fragment

    <FrameLayout
        android:id="@+id/news_content_fragment_framelayout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"
       >

        <fragment
            android:id="@+id/news_content_fragment_main"
            android:name="com.example.administrator.fragmentbestp.NewsContentFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            ></fragment>
    </FrameLayout>

    同理也可以编写单页的main_activtity.xml文件

    8)新闻内容展示方式有fragmentActivity两种方式,通过Mainactivity中是否有用来装新闻内容的FrameLayout来判断并且用isTwoPane来记录。

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (getActivity().findViewById(R.id.news_content_fragment_framelayout)!=null){
            isTwoPane =true;
        }else {
            isTwoPane = false;
        }
    }

    9)新闻内容展示主要由新闻索引中是否点击决定

    所以在NewsTitleFragment类中编写的适配器中,对子项目添加监听器,如果被点击则创建活动/展示碎片。

    public NewsTitleApater.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_title_item,parent,false);
        final ViewHolder holder = new ViewHolder(view);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                News news = mNewslist.get(holder.getAdapterPosition());
                if (isTwoPane) {
                    NewsContentFragment newsContentFragment = (NewsContentFragment) getFragmentManager().findFragmentById(R.id.news_content_fragment_main);
                    newsContentFragment.refrech(news.getHeadline(),news.getContent_top(),news.getContent_buttom(),news.getSrc());
                }else{
                    NewsContentActivity.actionStart(getActivity(),news.getHeadline(),news.getContent_top(),news.getContent_buttom(),news.getSrc());
                }
            }
        });
        return holder;
    }

    (10)最后将News信息存到News链表里,并填充数据。

    public void init_news(){
        News news;
        for(int i=1;i<6;i++){
            news = new News();
            news.setHeadline("This is news title"+i);
            news.setContent_buttom(getRandomLContent("This is news title"+i));
            news.setContent_top("这是图片"+i);
            news.setSrc(imgs[i]);
            newslist.add(news);
        }
    }
    private String getRandomLContent(String input){
        Random r = new Random();
        int l =r.nextInt(10)+1;
        StringBuilder builder = new StringBuilder();
        for(int i=0;i<l;i++){
            builder.append(input);
        }
        return builder.toString();
    }

  • 相关阅读:
    Windows2012修改光驱盘符
    推薦幾個海外片源站
    Learning Puppet — Variables, Conditionals, and Facts
    红灯是否可以掉头?
    Windows Server 2008
    Learning Puppet — Resource Ordering
    Learning Puppet — Manifests
    Learning Puppet — Resources and the RAL
    quotas and disk replace on netapp
    美国夏令时与冬令时的区别
  • 原文地址:https://www.cnblogs.com/ttnrt/p/11653679.html
Copyright © 2011-2022 走看看