Android Recyclerview在onClick方法上提供了错误的位置

Android Recyclerview在onClick方法上提供了错误的位置,android,facebook,android-recyclerview,Android,Facebook,Android Recyclerview,我可以根据需要查看应用程序中的所有项目,但当使用onClick方法在facebook上共享应用程序内容时,它会显示与所单击项目相关的错误项目。我得到的图像,标题和其他相关的东西,但错误的适配器位置显示。e、 g.如果单击第三个位置,它将在recyclerview中显示第四个项目的结果。谁能告诉我我做错了什么 下面是我的适配器代码: private LayoutInflater inflater; Context context; Uri uri; String str_uri; List<

我可以根据需要查看应用程序中的所有项目,但当使用onClick方法在facebook上共享应用程序内容时,它会显示与所单击项目相关的错误项目。我得到的图像,标题和其他相关的东西,但错误的适配器位置显示。e、 g.如果单击第三个位置,它将在recyclerview中显示第四个项目的结果。谁能告诉我我做错了什么

下面是我的适配器代码:

private LayoutInflater inflater;
Context context;
Uri uri;
String str_uri;
List<Data> dataArray;
private int lastPosition = -1;

public RecyclerViewAdapter(Context context) {
    //this.dataArray = dataArray;
    this.context = context;
    inflater = LayoutInflater.from(context);
}

public void setDataArray(List<Data> dataArray) {
    this.dataArray = dataArray;

}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, null);
    View view = inflater.inflate(R.layout.cardview, parent, false);
    CustomViewHolder holder = new CustomViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
    Data current = dataArray.get(position);
    holder.textView1.setText(current.heading);
    holder.textView2.setText(current.date);
    holder.textView3.setText(current.brief);

    // Using picasso to fetch image as the user scrolls down ... No need to store
    // all the images during start up.

    uri = Uri.parse(current.getLImage());
    if (current.getLlImage() == null || current.getLlImage().equalsIgnoreCase("null")) {
        Picasso.with(this.context).cancelRequest(holder.image);
        holder.image.setVisibility(View.GONE);
        HomeActivity.setParameters(current.heading, current.date, current.brief, uri);
        setAnimation(holder.relativeLayout, position);

    } else {
        Picasso.with(context).load(uri).into(holder.image);
        HomeActivity.setParameters(current.heading, current.date, current.brief, uri);
        // Animation
        setAnimation(holder.relativeLayout, position);
    }

}

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


public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    ImageView image, facebook_Sharing;
    RelativeLayout relativeLayout;
    TextView textView1, textView2, textView3;

    public CustomViewHolder(View itemView) {
        super(itemView);
        textView1 = (TextView) itemView.findViewById(R.id.heading);
        textView2 = (TextView) itemView.findViewById(R.id.date);
        textView3 = (TextView) itemView.findViewById(R.id.brief);
        image = (ImageView) itemView.findViewById(R.id.imageView);
        facebook_Sharing = (ImageView) itemView.findViewById(R.id.facebook_Sharing);
        facebook_Sharing.setOnClickListener(this);
        relativeLayout = (RelativeLayout) itemView.findViewById(R.id.Relative);
    }

    @Override
    public void onClick(View v) {

        Intent intent = new Intent(context.getApplicationContext(), HomeActivity.class);
        intent.putExtra("adapterPosition", getAdapterPosition());
        context.startActivity(intent);
    }
}


private void setAnimation(View viewToAnimate, int position) {
    // If the bound view wasn't previously displayed on screen, it's animated

    if (position > lastPosition || position < lastPosition) {

        Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }

}

试试这段代码,我将标签设置到你的facebook_共享中,查看并获得onclik()上的位置

私人充气机;
语境;
Uri;
字符串str_uri;
列表数据数组;
private int lastPosition=-1;
公共RecycleServiceAdapter(上下文){
//this.dataArray=dataArray;
this.context=上下文;
充气器=充气器。从(上下文);
}
公共无效setDataArray(列表dataArray){
this.dataArray=dataArray;
}
@凌驾
公共CustomViewHolder onCreateViewHolder(视图组父级,int-viewType){
//查看视图=LayoutFlater.from(parent.getContext()).flate(R.layout.cardview,null);
视图=充气机。充气(R.layout.cardview,父视图,false);
CustomViewHolder=新的CustomViewHolder(视图);
报税表持有人;
}
@凌驾
公共无效onBindViewHolder(CustomViewHolder,int位置){
当前数据=dataArray.get(位置);
holder.textView1.SETEXT(当前标题);
holder.textView2.setText(当前日期);
holder.textView3.setText(current.brief);
holder.facebook_Sharing.setTag(“+position”);
//使用毕加索在用户向下滚动时获取图像…无需存储
//启动期间的所有图像。
uri=uri.parse(current.getLImage());
if(current.getLlImage()==null | | current.getLlImage().equalsIgnoreCase(“null”)){
毕加索.with(this.context).cancelRequest(holder.image);
holder.image.setVisibility(View.GONE);
setParameters(current.heading、current.date、current.brief、uri);
设置动画(保持架相对位置);
}否则{
毕加索.with(context).load(uri).into(holder.image);
setParameters(current.heading、current.date、current.brief、uri);
//动画
设置动画(保持架相对位置);
}
}
@凌驾
public int getItemCount(){
返回dataArray.size();
}
公共类CustomViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
ImageView图像、facebook_共享;
相对的相对的;
文本视图文本视图1、文本视图2、文本视图3;
公共CustomViewHolder(查看项目视图){
超级(项目视图);
textView1=(TextView)itemView.findViewById(R.id.heading);
textView2=(TextView)itemView.findViewById(R.id.date);
textView3=(TextView)itemView.findViewById(R.id.brief);
image=(ImageView)itemView.findViewById(R.id.ImageView);
facebook_共享=(ImageView)itemView.findViewById(R.id.facebook_共享);
facebook_Sharing.setOnClickListener(这个);
relativeLayout=(relativeLayout)itemView.findViewById(R.id.Relative);
}
@凌驾
公共void onClick(视图v){
int pos=Integer.parseInt(“+v.getTag());
Intent Intent=新的Intent(context.getApplicationContext(),HomeActivity.class);
意向。额外(“适配器位置”,位置);
背景。开始触觉(意图);
}
}
私有void setAnimation(视图视图到动画,int位置){
//如果绑定视图以前未显示在屏幕上,则会设置动画
如果(位置>最后位置| |位置<最后位置){
Animation Animation=AnimationUtils.loadAnimation(上下文,android.R.anim.slide\u在左);
viewToAnimate.startAnimation(动画);
最后位置=位置;
}
}

如果有人来这里解决这个问题,这个解决方案可能会对他/她有所帮助

将dataArray设置为静态并直接在共享内容模块中使用其内容将纠正此问题。在适配器类中,dataArray应声明为:

public static List<Data> dataArray;

试试我的代码,用位置将标签设置到你的视图。不,它不起作用,现在插入第二个元素!完美答案。救了我一天。非常感谢。
  private LayoutInflater inflater;
Context context;
Uri uri;
String str_uri;
List<Data> dataArray;
private int lastPosition = -1;

public RecyclerViewAdapter(Context context) {
    //this.dataArray = dataArray;
    this.context = context;
    inflater = LayoutInflater.from(context);
}

public void setDataArray(List<Data> dataArray) {
    this.dataArray = dataArray;

}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, null);
    View view = inflater.inflate(R.layout.cardview, parent, false);
    CustomViewHolder holder = new CustomViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
    Data current = dataArray.get(position);
    holder.textView1.setText(current.heading);
    holder.textView2.setText(current.date);
    holder.textView3.setText(current.brief);
    holder.facebook_Sharing.setTag("" + position);
    // Using picasso to fetch image as the user scrolls down ... No need to store
    // all the images during start up.

    uri = Uri.parse(current.getLImage());
    if (current.getLlImage() == null || current.getLlImage().equalsIgnoreCase("null")) {
        Picasso.with(this.context).cancelRequest(holder.image);
        holder.image.setVisibility(View.GONE);
        HomeActivity.setParameters(current.heading, current.date, current.brief, uri);
        setAnimation(holder.relativeLayout, position);

    } else {
        Picasso.with(context).load(uri).into(holder.image);
        HomeActivity.setParameters(current.heading, current.date, current.brief, uri);
        // Animation
        setAnimation(holder.relativeLayout, position);
    }

}

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


public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    ImageView image, facebook_Sharing;
    RelativeLayout relativeLayout;
    TextView textView1, textView2, textView3;

    public CustomViewHolder(View itemView) {
        super(itemView);
        textView1 = (TextView) itemView.findViewById(R.id.heading);
        textView2 = (TextView) itemView.findViewById(R.id.date);
        textView3 = (TextView) itemView.findViewById(R.id.brief);
        image = (ImageView) itemView.findViewById(R.id.imageView);
        facebook_Sharing = (ImageView) itemView.findViewById(R.id.facebook_Sharing);
        facebook_Sharing.setOnClickListener(this);
        relativeLayout = (RelativeLayout) itemView.findViewById(R.id.Relative);
    }

    @Override
    public void onClick(View v) {
         int pos = Integer.parseInt("" + v.getTag());
        Intent intent = new Intent(context.getApplicationContext(), HomeActivity.class);
        intent.putExtra("adapterPosition", pos);
        context.startActivity(intent);
    }
}


private void setAnimation(View viewToAnimate, int position) {
    // If the bound view wasn't previously displayed on screen, it's animated

    if (position > lastPosition || position < lastPosition) {

        Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
        viewToAnimate.startAnimation(animation);
        lastPosition = position;
    }

}
public static List<Data> dataArray;
share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ShareLinkContent content = new ShareLinkContent.Builder()
                    .setContentTitle(JSONAsync.dataArray.get(adapterPosition).heading)
                    .setContentDescription(JSONAsync.dataArray.get(adapterPosition).brief)
                    .setImageUrl(Uri.parse(JSONAsync.dataArray.get(adapterPosition).getLImage()))
                    .setContentUrl(Uri.parse(String.valueOf(Uri.parse(JSONAsync.dataArray.get(adapterPosition).getNews())))).build();
            shareDialog.show(content);
        }
    });