适配器中onBindViewHolder中的位置始终返回最后一项

时间:2017-01-29 21:33:30

标签: android android-studio

目标是当我点击gridview中的某个项目时,它应该打开另一个活动,显示所选项目的详细信息。但是,传递给新活动的值(通过.putExtra)始终是arraylist中的最后一项,无论我点击哪个项目。这是在适配器类btw内。谢谢:))

代码可以在下面看到

@Override
    public void onBindViewHolder(final listHolder newsHolder, final int position) {

        currentNews = newsList.get(position);
        listHolder.ivArt.setImageResource(currentNews.getArt());
        newsHolder.ivArt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(viewGroup.getContext(), ViewNewsActivity.class);
                intent.putExtra("list, (Parcelable) list);
                viewGroup.getContext().startActivity(intent);

            }
        });
    }

3 个答案:

答案 0 :(得分:0)

由于OnClickListener()方法中设置onBindViewHolder,您会遇到这种奇怪的行为。添加setOnClickListener()以查看onCreateViewHolder()内部,并在适配器内创建new View.OnClickListener()

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.your_layout, parent, false);
        view.setOnClickListener(onClickListener);
        ...
    }

private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int viewPosition = recyclerView.getChildLayoutPosition(v);
            ...
        }
    };

答案 1 :(得分:0)

不要让你的onBindViewHolder上的位置最终,因为如果删除任何项目或添加项目,ViewHolder仍将具有旧位置的引用,而是考虑使用:holder.getAdapterPosition()

答案 2 :(得分:0)

  1. 不要宣布职位为最终职位。
  2. currentNews = newsList.get(position); 在onClick方法
  3. 中添加