2016-04-08 19 views
1

必要に応じてアプリケーション内のすべてのアイテムを表示できますが、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); 
} 
+0

私のコードを試してみてください、位置を使用してビューにタグを設定します。 – appukrb

答えて

1

は、私はあなたのfacebook_Sharingビューにセットタグ、このコードを試してみて、上の位置を取得しますonclik()

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

} 
+0

いいえ、それは動作しません、今すぐ2番目の要素を挿入! – Umair

+1

完璧な答え。私の日を救った。ありがとうございました。 –

0

この特定の問題について誰かがここに来る場合、この解決策が彼/彼女を助けるかもしれません。

dataArrayを静的にし、内容を共有コンテンツモジュール内で直接使用すると、この問題が修正されます。アダプタクラスでは、dataArrayはとして宣言する必要があります。

public static List<Data> dataArray; 

やFacebookのアクティビティのonClickリスナの内側に、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); 
     } 
    }); 
関連する問題