先看效果
1.首先,要实现上面的效果,就必须得有两个字段,用来显示新闻的标题和内容,所以新建一个新闻类(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; } }
2.创建用于显示新闻内容的布局
可以看到做左边是可以实现滑动效果的,所以我们新建一个news_title_frag.xml布局来实现它
接着再新建一个news_item.xml布局作为上面RecyclerView要展示的内容
右边的布局就如下展示
3.接着在res目录下新建layout-600dp文件夹,在这里面新建一个activity_main.xml文件,并对他添加以下代码,那么我们的布局就已经完成了,接下来就是往布局里添加具体内容了
4.接着分别创建NewsTitleFragment类和NewsContentFragment类继承Fragment
package com.example.demo_fragment2; 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.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class NewsTitleFragment extends Fragment { //新建一个内部类来作为RecyclerView的适配器 class NewsAdapter extends RecyclerView.Adapter{ private List mNewsList; class ViewHolder extends RecyclerView.ViewHolder{ TextView newstitleText; public ViewHolder(View view){ super(view); newstitleText = view.findViewById(R.id.news_title); } } public NewsAdapter(List newsList){ mNewsList=newsList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.new_item, parent, false); final ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder( ViewHolder holder, int position) { News news = mNewsList.get(position); holder.newstitleText.setText(news.getTitle()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { NewsContentFragment fragment= (NewsContentFragment) getFragmentManager() .findFragmentById(R.id.news_content_fragment); fragment.refresh(news.getTitle(),news.getContent()); } }); } @Override public int getItemCount() { return mNewsList.size(); } } @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 news_title_recycler_view = view.findViewById(R.id.news_title_recycler_view); LinearLayoutManager linearLayout = new LinearLayoutManager(getActivity()); news_title_recycler_view.setLayoutManager(linearLayout); NewsAdapter adapter=new NewsAdapter(getNews()); news_title_recycler_view.setAdapter(adapter); return view; } private List getNews(){ List newsList = new ArrayList<>(); for (int i = 0; i <= 50; i++) { News news = new News(); news.setTitle("这是一个 news title"+i); news.setContent("这是一个 news Content"+i+"****"); newsList.add(news); } return newsList; } }
package com.example.demo_fragment2; 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; public class NewsContentFragment extends Fragment { private View view; @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 newTitle,String newContent){ View visibility_layout = view.findViewById(R.id.visibility_layout); visibility_layout.setVisibility(View.VISIBLE); TextView title = view.findViewById(R.id.news_title); TextView content = view.findViewById(R.id.news_content); title.setText(newTitle); content.setText(newContent); } }记住,因为我们实现的效果需要平板才能看到