簡體   English   中英

如何使用 web 視圖將一個片段替換為另一個片段,以通過單擊 recyclerview 中的不同項目來打開不同的 URL?

[英]How to replace a fragment with another fragment with a web view to open different URLs by clicking on different items in the recyclerview?

我的問題是,我在一個名為“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.
}

但是您會看到一條評論說打開一個新活動或替換具有 webview 的片段。 我多次嘗試用另一個片段替換,但它根本沒有打開我的片段。 我的意思是,它會加載布局,但不會用另一個片段替換。 我是 Android 的新手,老實說,我不知道出了什么問題。 你能幫我寫代碼嗎?

為 web 視圖創建一個新片段並傳遞您的數據並使用您的活動替換新片段:

檢查我對這個問題的回答:

https://stackoverflow.com/questions/58680300

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// here open new activity or replace fragment which have webview.

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
}

嘗試這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM