android - 如何通过单击recyclerview中的不同项目将一个片段替换为另一个带有Web视图的片段以打开不同的URL?
问题描述
我的问题是,我在一个名为“FragmentNewsItems”的片段中实现了一个recyclerview,它列出了cardview中的一组新闻(图像+文本)。所以我的任务是,制作应用程序,以便当我点击回收视图中的其中一个项目时,应用程序会将其替换为另一个带有 Web 视图的片段。
一些好心人建议我创建一个点击事件:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
// add this line
private AdapterView.OnItemClickListener onItemClickListener;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView image;
private TextView text;
FragmentNewsItems fragmentNewsItems = new FragmentNewsItems();
public ViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
text = itemView.findViewById(R.id.text);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
mAdapter.onItemHolderClick(ViewHolder.this);
}
}
public void setOnItemClickListener(AdapterView.OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
private void onItemHolderClick(ViewHolder holder) {
if (onItemClickListener != null)
onItemClickListener.onItemClick(null, holder.itemView, holder.getAdapterPosition(), holder.getItemId());
}
}
然后将点击事件添加到片段中:
public class FragmentNewsItems extends Fragment implements AdapterView.OnItemClickListener{
View view;
private RecyclerView recyclerView;
private List<NewsItems> cyberNews;
private FragmentNewsItems fragmentNewsItems;
public FragmentNewsItems(){
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.f_news_items_layout, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.news_items_recycler_view);
RecyclerViewAdapter recyclerAdapter = new RecyclerViewAdapter(getContext(), cyberNews);
// add this line
recyclerAdapter .setOnItemClickListener(this);
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
recyclerView.setAdapter(recyclerAdapter);
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cyberNews = new ArrayList<>();
cyberNews.add(new NewsItems(R.drawable.cyber1, "The of cybersecurity in 5G-connected world"));
cyberNews.add(new NewsItems(R.drawable.cyber2, "Google discovered several iPhone security flaws, and Apple still hasn't patched one"));
cyberNews.add(new NewsItems(R.drawable.cyber3, "WhatsApp and Telegram media files aren't so secure"));
cyberNews.add(new NewsItems(R.drawable.cyber4, "Microsoft Exposes Russian Cyberattacks on Phones, Printers, Video Decoders"));
cyberNews.add(new NewsItems(R.drawable.cyber5, "Tesla demonstrated the power of The Internet of Things"));
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// here open new activity or replace fragment which have webview.
}
像这样:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// here open new activity or replace fragment which have webview.
}
但是您会看到一条评论,上面写着打开一个新活动或替换具有 web 视图的片段。我多次尝试用另一个片段替换,但它根本没有打开我的片段。我的意思是,它会加载布局,但不会用另一个片段替换。我是 Android 新手,老实说,我不知道出了什么问题。你能帮我写代码吗?
解决方案
推荐阅读
- python - Tkinter 在两个小部件(画布)之间插入分隔空间
- c# - 在选定的索引更改不应包括 datagridview asp.net 中的第一列
- c# - 如何汇总结果表中的所有数量值并将总和与总值进行比较?
- visual-studio - 通过 Vnet 在本地创建 SSIS 包
- python - 检查字符串的所有字母之间是否有空格
- multithreading - 限制同时运行的线程数
- python - 比较 JSON 路径是否与索引等价
- logging - 声纳问题:确保此记录器的配置是安全的
- javascript - 如何找到嵌套在 JSON 中的列的最大值?
- c# - 列表中的所有项目都获得相同的值