Fragment简易新闻

来源:互联网 发布:搜狐证券软件 编辑:程序博客网 时间:2024/05/29 14:34

这里写图片描述

下面是xml布局文件
activity_main.xml: 屏幕宽度小于600dp加载这个布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">  <fragment      android:id="@+id/news_title"      android:name="com.ukulele.fragmentbestpractice.NewsTitleFragment"      android:layout_width="match_parent"      android:layout_height="match_parent"      tools:layout_editor_absoluteY="8dp"      tools:layout_editor_absoluteX="8dp" /></LinearLayout>

activity_main.xml(sw600dp): 屏幕宽度大于600dp加载这个布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="match_parent">   <fragment       android:id="@+id/news_title_fragment"       android:name="com.ukulele.fragmentbestpractice.NewsTitleFragment"       android:layout_width="0dp"       android:layout_height="match_parent"       android:layout_weight="1"/>    <fragment        android:id="@+id/news_content_fragment"        android:name="com.ukulele.fragmentbestpractice.NewsContentFragment"        android:layout_width="0dp"        android:layout_height="match_parent"        android:layout_weight="3"/></LinearLayout>

news_title_frag.xml:新闻标题碎片需要加载的布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <android.support.v7.widget.RecyclerView        android:id="@+id/news_title_recycler_view"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

news_title_item.xml:新闻标题recyclerview的item

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_marginBottom="20dp">    <TextView        android:id="@+id/news_title"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

news_content.xml:新闻内容碎片

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <fragment        android:id="@+id/news_content_fragment"        android:name="com.ukulele.fragmentbestpractice.NewsContentFragment"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

news_content_frag.xml: 新闻内容碎片需要加载的布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent">    <View        android:layout_width="1dp"        android:layout_height="match_parent"        android:background="#000"/>        <LinearLayout            android:orientation="vertical"            android:layout_width="match_parent"            android:layout_height="match_parent">            <TextView                android:id="@+id/news_title"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:gravity="center"                android:padding="10dp"                android:textSize="20sp"/>            <View                android:layout_width="match_parent"                android:layout_height="1dp"                android:background="#000"/>            <TextView                android:id="@+id/news_content"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:padding="15dp"                android:textSize="18sp"/>        </LinearLayout></LinearLayout>

下面是代码
News实体类:

public class News {    private String title;    private String content;    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }}

MainActivity:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

NewsTitleFragment: 新闻标题Fragment

public class NewsTitleFragment extends Fragment {    private boolean isTwoPane;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.news_title_frag,container,false);        RecyclerView newsTitleRecyclerView = view.findViewById(R.id.news_title_recycler_view);        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());        newsTitleRecyclerView.setLayoutManager(layoutManager);        NewsAdapter adapter = new NewsAdapter(getNews());        newsTitleRecyclerView.setAdapter(adapter);        return view;    }    private List<News> getNews() {        List<News> newsList = new ArrayList<>();        for (int i = 1; i <= 50; i++) {            News news = new News();            news.setTitle("This is news title " + i);            news.setContent(getRandomLengthContent("This is news content " + i + ". "));            newsList.add(news);        }        return newsList;    }    private String getRandomLengthContent(String content) {        Random random = new Random();        int length = random.nextInt(20) + 1;        StringBuilder builder = new StringBuilder();        for (int i = 0; i < length; i++) {            builder.append(content);        }        return builder.toString();    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        if(getActivity().findViewById(R.id.news_content_fragment)!=null){            isTwoPane = true;//可以找到news_content_layout布局时,为双页模式        }else{            isTwoPane = false;//找不到news_content_layout布局时,为单页模式        }    }    class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder>{        private List<News> mNewsList;        class ViewHolder extends RecyclerView.ViewHolder{            TextView newsTitleText;            public ViewHolder(View view){                super(view);                newsTitleText = view.findViewById(R.id.news_title);            }        }        public NewsAdapter(List<News> newsList){            mNewsList = newsList;        }        @Override        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);            final ViewHolder holder = new ViewHolder(view);            view.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    News news = mNewsList.get(holder.getAdapterPosition());                    if(isTwoPane){                        //如果是双页模式,则刷新NewsContentFragment 中的内容                        NewsContentFragment newsContentFragment = (NewsContentFragment) getFragmentManager().                                findFragmentById(R.id.news_content_fragment);                        newsContentFragment.refresh(news.getTitle(),news.getContent());                    }else{                        //如果是单页模式,则启动NewsContentActivity                        NewsContentActivity.actionStart(getActivity(),news.getTitle(),news.getContent());                    }                }            });            return holder;        }        @Override        public void onBindViewHolder(ViewHolder holder, int position) {            News news = mNewsList.get(position);            holder.newsTitleText.setText(news.getTitle());        }        @Override        public int getItemCount() {            return mNewsList.size();        }    }}

NewsContentActivity:如果屏幕小于600dp的设备,点击新闻标题列表就会跳转到该活动。如果大于600dp,就不会跳转到该活动,就会直调用NewsContentFragment的refresh()方法进行刷新

public class NewsContentActivity extends AppCompatActivity {    public static void actionStart(Context context,String newsTitle,String newsContent){        Intent intent = new Intent(context,NewsContentActivity.class);        intent.putExtra("news_title",newsTitle);        intent.putExtra("news_content",newsContent);        context.startActivity(intent);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.news_content);        String newsTitle = getIntent().getStringExtra("news_title");//获取传入的新闻标题        String newsContent = getIntent().getStringExtra("news_content");//获取传入新闻内容        NewsContentFragment newsContentFragment = (NewsContentFragment)                 getSupportFragmentManager().findFragmentById(R.id.news_content_fragment);        newsContentFragment.refresh(newsTitle,newsContent);//刷新NewsContentFragment界面    }}

NewsContentFragment: 新闻内容Fragment

public class NewsContentFragment extends Fragment {    private View view;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        view = inflater.inflate(R.layout.news_content_frag,container,false);        return view;    }    public void refresh(String newsTitle,String newsContent){        TextView newsTitleText = view.findViewById(R.id.news_title);        TextView newsContentTitle = view.findViewById(R.id.news_content);        newsTitleText.setText(newsTitle);        newsContentTitle.setText(newsContent);    }}
原创粉丝点击