gpt4 book ai didi

java - 如何通过单击 recyclerview 中的项目在具有 Web View 的新 fragment 上加载网站?

转载 作者:行者123 更新时间:2023-12-01 22:08:42 25 4
gpt4 key购买 nike

我不知道如何通过单击 Recyclerview 中定义的项目之一,通过 Web View 在新的 fragment 上加载网站。这是我的代码:

NewsItems.java

package com.example.assignment_4_task_1;

import android.view.View;

public class NewsItems {
private int image;
private String text;

public NewsItems(){
}

public NewsItems(int image, String text) {
this.image = image;
this.text = text;
}

//Getter
public int getImage() {
return image;
}

public String getText() {
return text;
}

}

```

RecyclerviewAdapter.java

package com.example.assignment_4_task_1;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
Context mContext;
List<NewsItems> mData;

public RecyclerViewAdapter(Context mContext, List<NewsItems> mData) {
this.mContext = mContext;
this.mData = mData;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
view = LayoutInflater.from(mContext).inflate(R.layout.layout_grid_item, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.image.setImageResource(mData.get(position).getImage());
holder.text.setText(mData.get(position).getText());
}

@Override
public int getItemCount() {
return mData.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {
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);
}

}


}

FragmentNewsItems.java

package com.example.assignment_4_task_1;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
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.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class FragmentNewsItems extends Fragment {

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);

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"));

}
}

MainActivity.java

package com.example.assignment_4_task_1;

import android.os.Bundle;

import com.google.android.material.tabs.TabLayout;

import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
private TabLayout tabs;
private ViewPager viewPager;
private SectionsPagerAdapter adapter;
private FragmentNewsItems fragmentNewsItems;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tabs = findViewById(R.id.tabs);
viewPager = findViewById(R.id.view_pager);
adapter = new SectionsPagerAdapter(getSupportFragmentManager());

//Add Fragment to the Layout
adapter.addFragment(new FragmentNewsItems(), "CYBERSECURITY");
adapter.addFragment(new FragmentWebPage(), "AI");

viewPager.setAdapter(adapter);
tabs.setupWithViewPager(viewPager);

}
}

输出是它在 viewpager 中显示两个 fragment (分别具有两个选项卡),并在第一个 fragment 上以交错网格布局显示新闻列表。我的任务是“功能化”应用程序,以便它通过单击此处列出的其中一项来加载网站:

(FragmentNewsItems.java,您可以在上面看到)

        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"));

但我不知道如何让它发挥作用。

我尝试了不同的方法,但似乎我根本不理解该应用程序的逻辑。我是 Android 新手,目前,我很难在不同的 fragment 、 Activity 、它们的初始化等之间进行定位。

应用程序运行,它显示我创建的所有布局,但不打开webview

最佳答案

首先,您必须为回收者 View 持有者创建点击事件

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());
}
}

现在在 fragment 中添加点击事件

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.
}

关于java - 如何通过单击 recyclerview 中的项目在具有 Web View 的新 fragment 上加载网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com