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