【问题标题】:RecyclerView and onclicklistner operationRecyclerView 和 onclicklistener 操作
【发布时间】:2018-03-10 19:40:58
【问题描述】:

我正在将 RSS 提要提取到我的应用程序中,并在单击 recyclerView 的一条新闻时尝试打开一个意图(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);**
            }
        });
    }
}

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

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

是我在第一个类中尝试的相同代码,错误是因为 RecyclerView,而在第二个中它给出了错误,因为 startActivity 在该类中不起作用。 那么如何激活点击后进入浏览器的clicakble新闻呢?

【问题讨论】:

  • 你到底想要什么??目前的情况是什么?你为什么要走那条路??
  • 你使用互联网权限吗?
  • @SantanuSur 它没有重复我确实尝试了两个类中的代码来测试它是否有效。我已经更新了帖子,希望现在更清楚
  • @Rainmaker 是的,我使用互联网权限,并且 rss 被提取并在应用程序中正确显示图像,但它是可点击的,但是当我点击新闻时它不会进入浏览器。

标签: java android android-recyclerview onclicklistener android-adapter


【解决方案1】:

要从adapter class 使用开始活动

     context.startActivity(intent); 

如果这是你的问题。)

我的建议

holder.itemView.setOnClick....上的适配器的onBindViewHolder(..)中设置点击监听器

【讨论】:

  • 非常感谢,信不信由你,在它不起作用之前我确实尝试了两次,但这次我说让我们再试一次,它确实有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多