【问题标题】:How to open URL after clicking at a particular item in RecyclerView?单击 RecyclerView 中的特定项目后如何打开 URL?
【发布时间】:2020-08-21 09:02:59
【问题描述】:

我将一个对象列表传递给我的适配器。对象的类型为Uploads 类,其中仅包含DocnameDocurl。在每个 RecyclerView 项目上显示 Docname 后,我希望当用户点击任何项目时,浏览器应该打开与该项目的 URL 对应的 URL。

这是我尝试过的。它没有抛出任何错误,应用程序运行顺利,但是当我点击任何项目时,什么也没有发生。

public class EbookRepresentAdapter extends RecyclerView.Adapter<EbookRepresentAdapter.EbookRepresentViewHolder> {

    private Context mContext;
    private List<Uploads> mbooks;
    public String bookurl;


    public EbookRepresentAdapter(Context context, List<Uploads> books) {
        mContext = context;
        mbooks = books;
    }

    public class EbookRepresentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public Context usecontext;
        public TextView mbookname;


        public EbookRepresentViewHolder(View itemView) {
            super(itemView);

            mbookname = itemView.findViewById(R.id.subjectname);
            usecontext=itemView.getContext();

        }


        @Override
        public void onClick(View v) {

            Intent intent=new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(bookurl));
            mContext.startActivity(intent);
        }
    }
    

    @NonNull
    @Override
    public EbookRepresentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v= LayoutInflater.from(mContext).inflate(R.layout.subjectcard,parent,false);
        return new EbookRepresentViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull EbookRepresentViewHolder holder, int position) {

        Uploads yearSubjectcurrent= mbooks.get(position);
        String subname=yearSubjectcurrent.getDocname();
        bookurl= yearSubjectcurrent.getDocurl();
        //Log.d(TAG,"subname = "+ subname);
        holder.mbookname.setText(subname);

    }

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

如果有人能帮忙就好了。

【问题讨论】:

    标签: android android-recyclerview android-adapter


    【解决方案1】:

    您需要添加itemView.setOnClickListener(this)

    public EbookRepresentViewHolder(View itemView) {
                super(itemView);
    
                mbookname = itemView.findViewById(R.id.subjectname);
                usecontext=itemView.getContext();
                itemView.setOnClickListener(this)
            }
    

    加上改变这个

    public void onBindViewHolder(@NonNull EbookRepresentViewHolder holder, int position) {
    
            Uploads yearSubjectcurrent= mbooks.get(position);
            String subname=yearSubjectcurrent.getDocname();
            bookurl= yearSubjectcurrent.getDocurl();
            //Log.d(TAG,"subname = "+ subname);
            holder.mbookname.setText(subname);
    

     public void onBindViewHolder(@NonNull EbookRepresentViewHolder holder, int position) {
    
        Uploads yearSubjectcurrent= mbooks.get(position);
        String subname=yearSubjectcurrent.getDocname();
        //bookurl= yearSubjectcurrent.getDocurl(); //delete this line
        //Log.d(TAG,"subname = "+ subname);
        holder.mbookname.setText(subname);
    
    }
    
        }
    

    您将覆盖 bookurl 变量。

    并使用

    public void onClick(View v) {
                int i = getLayoutPosition();
                Uploads yearSubjectcurrent= mbooks.get(i);
                bookurl= yearSubjectcurrent.getDocurl();
                //than Intent Code
            }
    

    【讨论】:

      【解决方案2】:

      您忘记添加itemView.setOnClickListener(this)

      就用这个吧,

              public EbookRepresentViewHolder(View itemView) {
                  super(itemView);
      
                  mbookname = itemView.findViewById(R.id.subjectname);
                  usecontext=itemView.getContext();
                  itemView.setOnClickListener(this)
              }
      

      【讨论】:

        【解决方案3】:

        在你的 itemview 上设置 onClickListener 作为

         public EbookRepresentViewHolder(View itemView) {
                    super(itemView);
        
                    mbookname = itemView.findViewById(R.id.subjectname);
                    usecontext=itemView.getContext();
                    itemView.setOnClickListener(this);
        
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多