- 显示效果
- 手机页面显示流程(单页面,显示新闻标题,点击跳转到内容)
- 平板页面显示流程 (双页面,同时显示新闻标题以及内容)
- 整体流程
主Activity对应的XML文件在 layout文件夹下面。
平板页面显示流程 (双页面,同时显示新闻标题以及内容)主Activity对应的XML文件在layout-sw600dp文件夹下面
整体流程- 首先加载主Activity,与之对应的XML文件里面加入静态fragement片段,用来显示新闻的标题。
单页面:
双页面:
2.编写NewsTitleFragement ,继承Fragement(暂时先不写)。编写该NewsTitleFragement对应的XML文件。
- 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文件



