android - 单击项目时在新活动中打开 webview
问题描述
我是android开发的初学者。我创建了一个应用程序,在 RecyclerView 中显示来自 Firebase 的数据(图像和文本)。一切正常,还有一个数据(url),我希望当用户单击任何项目时,它将使用 Intent 开始新的活动,并将在 Webview 中显示此 url。我创建了新活动并在其中设置了 WebView。我只是不知道如何将 url 从 firebase 传递给这个活动。我搜索了 3 天,我确实知道我需要使用 setOnClickItemListener,但我没有找到任何与我的案例相关的内容。这就是为什么我想把它贴在这里。对不起我的英语不好 。谢谢你
我的 Firebase 数据是这样的 在此处输入图像描述
这是模型.java
public class model {
String title, image, description ,url;
public model() {
this.url=url ;
this.title = title;
this.image = image;
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getTitle() {
return title;
}
public String getImage() {
return image;
}
public String getDescription() {
return description;
}
public void setTitle(String title) {
this.title = title;
}
public void setImage(String image) {
this.image = image;
}
public void setDescription(String description) {
this.description = description;
}
}
这是 RecyclerAdapter.java
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder>{
private Context mContext;
private List<model> modelList;
public RecyclerAdapter(Context context, List<model> listData) {
this.modelList = listData;
this.mContext = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.title.setText(modelList.get(position).getTitle());
holder.description.setText((modelList.get(position).getDescription()));
Picasso.get().load(modelList.get(position).getImage()).into(holder.imageView);
}
@Override
public int getItemCount() {
return modelList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView title,description;
ImageView imageView;
public ViewHolder(View itemView){
super(itemView);
title=itemView.findViewById(R.id.Title);
description=itemView.findViewById(R.id.Description);
imageView=itemView.findViewById(R.id.ImageView);
}
}
}
这是 MainActivity.java
public class MainActivity extends AppCompatActivity {
private DatabaseReference reference ;
private StorageReference mStorageRef ;
private RecyclerView recyclerView;
private ArrayList<model> modelList;
private Context mContext = MainActivity.this;
private RecyclerAdapter recyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayoutManager layoutManager= new LinearLayoutManager(this );
recyclerView=findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
reference = FirebaseDatabase.getInstance().getReference();
mStorageRef = FirebaseStorage.getInstance().getReference();
modelList = new ArrayList<>();
init();
}
private void init(){
clearAll();
Query query = reference.child("Data");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
model rmodel = new model();
rmodel.setImage(snapshot.child("image").getValue().toString());
rmodel.setTitle(snapshot.child("title").getValue().toString());
rmodel.setUrl(snapshot.child("url").getValue().toString());
rmodel.setDescription(snapshot.child("description").getValue().toString());
modelList.add(rmodel);
}
recyclerAdapter = new RecyclerAdapter(mContext , modelList);
recyclerView.setAdapter(recyclerAdapter);
recyclerAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void clearAll(){
if (modelList !=null){
modelList.clear();
if(recyclerAdapter != null)
recyclerAdapter.notifyDataSetChanged();
}
modelList = new ArrayList<>();
}
}
解决方案
在onBindViewHolder
方法中:
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.title.setText(modelList.get(position).getTitle());
holder.description.setText((modelList.get(position).getDescription()));
Picasso.get().load(modelList.get(position).getImage()).into(holder.imageView);
holder.addOnClickListener(new OnClickListener() {
@override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(modelList.get(position).getUrl()));
startActivity(browserIntent);
}
});
}
这将在持有者上添加一个动作侦听器以在浏览器中打开 URL。
推荐阅读
- django - Django SuperUser 使用标准用户模型并让应用程序用户使用 CustomUser 模型
- reactjs - 有没有办法修复 yarn start 或 npm start 的编译错误,提示“没有这样的文件目录,stat ...”
- wpf - 在 Visual Studio 之外执行时应用程序没有获得焦点
- angular - 我有一个错误:属性“表单”没有初始化程序,并且没有在构造函数中明确分配
- ios - iOS 模拟器:移除设备顶部的控制栏
- python - 如何从文本文件中一一读取url来执行
- python - PyAudio 'unknown format: %r' 尝试播放 wav 文件时出错
- c++ - 将 const 引用绑定到另一种类型
- mongodb - 将包含文档 ID 的大型 Dataframe 映射到包含 Spark 和 MongoDB 中实际文档的 Dataframe
- node.js - 具有 Typescript 详细程度的节点 gRPC