Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何用另一个具有web视图的片段替换一个片段,通过单击recyclerview中的不同项打开不同的URL?_Android - Fatal编程技术网

Android 如何用另一个具有web视图的片段替换一个片段,通过单击recyclerview中的不同项打开不同的URL?

Android 如何用另一个具有web视图的片段替换一个片段,通过单击recyclerview中的不同项打开不同的URL?,android,Android,我的问题是,我在一个名为“FragmentNewsItems”的片段中实现了一个recyclerview,它在cardview中列出了一组新闻(图像+文本)。所以我的任务是,制作应用程序,这样当我点击recyclerview中的一个项目时,应用程序就会用另一个web视图片段替换它 一些好人建议我创建一个点击事件: public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHol

我的问题是,我在一个名为“FragmentNewsItems”的片段中实现了一个recyclerview,它在cardview中列出了一组新闻(图像+文本)。所以我的任务是,制作应用程序,这样当我点击recyclerview中的一个项目时,应用程序就会用另一个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());
        }
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
//添加这一行
私有AdapterView.OnItemClickListener OnItemClickListener;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
私有图像查看图像;
私有文本查看文本;
FragmentNewsItems FragmentNewsItems=新的FragmentNewsItems();
公共视图持有者(@NonNull View itemView){
超级(项目视图);
image=itemView.findviewbyd(R.id.image);
text=itemView.findviewbyd(R.id.text);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图){
mAdapter.onItemHolderClick(ViewHolder.this);
}
}
公共无效setOnItemClickListener(AdapterView.OnItemClickListener OnItemClickListener){
this.onItemClickListener=onItemClickListener;
}
私有void onItemHolderClick(视图持有者){
如果(MClickListener!=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.
}
公共类FragmentNewItems扩展了片段实现AdapterView.OnItemClickListener{
视图;
私人回收站;
私人网络新闻;
私人碎片新闻项目碎片新闻项目;
公共碎片新闻项目(){
}
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.f\u news\u items\u layout,container,false);
recyclerView=(recyclerView)视图.findViewById(R.id.news\u items\u recycler\u视图);
RecycleServiceAdapter recyclerAdapter=新的RecycleServiceAdapter(getContext(),cyberNews);
//添加这一行
recyclerAdapter.setOnItemClickListener(此);
setLayoutManager(新的StaggedGridLayoutManager(2,StaggedGridLayoutManager.VERTICAL));
recyclerView.setAdapter(recyclerAdapter);
返回视图;
}
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
cyberNews=新ArrayList();
cyberNews.add(新的新闻项目(R.drawable.cyber1,“5G互联世界中的网络安全问题”);
cyberNews.add(新的新闻条目(R.dravable.cyber2,“谷歌发现了几个iPhone的安全漏洞,而苹果还没有修补一个”);
添加(新的新闻项目(R.drawable.cyber3,“WhatsApp和电报媒体文件不那么安全”);
cyberNews.add(新新闻项目(R.dravable.cyber4,“微软揭露俄罗斯对手机、打印机、视频解码器的网络攻击”);
cyberNews.add(新的新闻项目(R.drawable.cyber5,“特斯拉展示了物联网的力量”);
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//在这里打开新活动或替换具有webview的片段。
}
像这样:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// here open new activity or replace fragment which have webview.
}
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//在这里打开新活动或替换具有webview的片段。
}

但你会看到一条评论,上面写着“打开一个新活动”或“替换具有网络视图的片段”。我多次尝试用另一个片段替换,但它根本没有打开我的片段。我的意思是,它加载了布局,但没有用另一个片段替换。我是Android新手,老实说,我不知道出了什么问题。你能帮我吗p是否使用编码?

为web视图创建新片段,并使用活动传递数据和替换新片段:

检查我对这个问题的回答:


再加上你的主要活动,这会很有帮助。