繁体   English   中英

单击项目时在新活动中打开 webview

[英]open webview in new activity when item is clicked

我是 android 开发的初学者。 我创建了一个应用程序,在 RecyclerView 中显示来自 Firebase 的数据(图像和文本)。 一切正常,还有一个数据(url),我希望当用户单击任何项目时,它将使用 Intent 开始新的活动,并将在 Webview 中显示此 url。 我创建了新活动并在其中设置了 WebView。 我只是不知道如何将 url 从 firebase 传递给这个活动。 我搜索了 3 天,我确实知道我需要使用 setOnClickItemListener,但我没有找到任何与我的案例相关的内容。 这就是为什么我想把它贴在这里。 对不起我的英语不好。 谢谢你

我的 Firebase 数据是这样的在此处输入图像描述

这是 model.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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM