RecyclerView和onclicklistner操作

RecyclerView and onclicklistner operation

我正在将 RSS 提要获取到我的应用程序中,并尝试在单击 recyclerView 的新闻之一时打开一个 intent(Web 浏览器),但它不起作用。这就是我的代码:

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    ArrayList<FeedItem> feedItems;

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

        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        //Call Read rss asyntask to fetch rss
        ReadRss readRss = new ReadRss(this, recyclerView);
        readRss.execute();

        recyclerView.setOnClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                **FeedItem current=feedItems.get(position);
                Uri uri = Uri.parse(current.getLink());
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);**
            }
        });
    }
}

我什至尝试将相同的代码放入我的支架 class 但其中的 startActivity() 方法不起作用: 上面的代码有点相同,但在另一个 class:

public class FeedsAdapter extends RecyclerView.Adapter<FeedsAdapter.MyViewHolder> implements View.OnClickListener {

    ArrayList<FeedItem> feedItems;
    Context context;
    public FeedsAdapter(Context context, ArrayList<FeedItem>feedItems){
        this.feedItems=feedItems;
        this.context=context;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.custum_row_news_item,parent,false);
        view.setClickable(true);
        view.setOnClickListener(this);
        MyViewHolder holder=new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        YoYo.with(Techniques.FadeIn).playOn(holder.cardView);
        FeedItem current=feedItems.get(position);
        holder.Title.setText(current.getTitle());
        holder.Description.setText(current.getDescription());
        holder.Date.setText(current.getPubDate());
        Picasso.get().load(current.getThumbnailUrl()).into(holder.Thumbnail);
        holder.cardView.setTag(position);
        Toast.makeText(context,current.getLink() ,Toast.LENGTH_SHORT).show();

    }

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

    @Override
    public void onClick(View view) {
        **int position = (int) view.getTag();
        FeedItem current=feedItems.get(position);
        Toast.makeText(context,"The Item Clicked is: "+current.getLink() ,Toast.LENGTH_SHORT).show();
        Uri uri = Uri.parse(current.getLink());
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);**
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView Title,Description,Date;
        ImageView Thumbnail;
        CardView cardView;
        public MyViewHolder(View itemView) {
            super(itemView);
            Title= (TextView) itemView.findViewById(R.id.title_text);
            Description= (TextView) itemView.findViewById(R.id.description_text);
            Date= (TextView) itemView.findViewById(R.id.date_text);
            Thumbnail= (ImageView) itemView.findViewById(R.id.thumb_img);
            cardView= (CardView) itemView.findViewById(R.id.cardview);
        }
    }
}

此代码:

FeedItem current=feedItems.get(position);
                    Uri uri = Uri.parse(current.getLink());
                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    startActivity(intent);

与我在两个 class 中尝试的代码相同,第一个错误是因为 RecyclerView,第二个错误是因为 startActivity 在 class. 那么,如何激活单击时转到浏览器的可点击新闻?

要从 adapter class 中开始 activity 使用

     context.startActivity(intent); 

(如果这是你的问题。)

我的建议

holder.itemView.setOnClick....

上的适配器 onBindViewHolder(..) 中设置点击侦听器