必要に応じてアプリケーション内のすべてのアイテムを表示できますが、onClickメソッドを使用してFacebook上でアプリコンテンツを共有している間、クリックしたアイテムに関して間違ったアイテムが表示されます。私はイメージ、見出し、および他の関連するものを取得していますが、間違ったアダプタ位置が表示されます。例えば3番目の位置をクリックすると、4番目のアイテムの結果がrecyclerviewに表示されます。私がここで間違っていることを誰もが私に案内してくれますか?Recyclerview onClickメソッドで間違った位置を指定する
以下私アダプターコードです:
以下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のアクティビティコードです:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.home);
share = (Button) findViewById(R.id.share);
callbackManager = CallbackManager.Factory.create();
facebookLogin = (LoginButton) findViewById(R.id.login_button);
facebookLogin.registerCallback(callbackManager, callback);
shareDialog = new ShareDialog(this);
// login.setReadPermissions("public_profile email");
share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ShareLinkContent content = new ShareLinkContent.Builder()
.setContentTitle(heading1)
.setContentDescription(brief1)
.setContentUrl(Uri.parse(String.valueOf(imageView1))).build();
shareDialog.show(content);
}
});
}
public static void setParameters(String heading, String date, String brief, Uri imageView) {
heading1 = heading;
date1 = date;
brief1 = brief;
System.out.println("BBBBBBBBBBBBBBBBBBBB is ::::::::: " + brief1);
imageView1 = imageView;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
私のコードを試してみてください、位置を使用してビューにタグを設定します。 – appukrb