2016-04-08 16 views
1

Uygulama içindeki tüm öğeleri gerektiği gibi görüntüleyebilirim, ancak uygulama içeriğini facebook'ta paylaşmak için onClick yöntemini kullanırken, tıklanan öğeyle ilgili olarak yanlış öğeleri gösterir. Görüntüyü, başlığı ve diğer ilgili şeyleri alıyorum ancak yanlış bağdaştırıcı konumu görüntülenir. Örneğin. Üçüncü pozisyona tıklarsam, geri dönüşümcüde 4'üncü maddenin sonucunu gösterecektir. Beni bu konuda yanlış yönlendiren herhangi biri olabilir.Recyclerview onview yöntemiyle yanlış konum belirlemeTıklama yöntemi

Aşağıda
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 Etkinlik kodudur:,

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

: dataArray gibi direcly erişilebilir olmalıdır

public static List<Data> dataArray; 

Ve Facebook Etkinlik onClick dinleyicisi içine: adaptör sınıfında, dataArray olarak beyan edilmelidir. – appukrb

cevap

1

bu kodu deneyin ben set Etiketi sizin facebook_Sharing görünümüne ve üzerindeki konumu elde Aşağıda

benim adaptör kodudur 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

Nopes, işe yaramaz, şimdi 2. elemanı ekliyor! – Umair

+1

Mükemmel cevap. Günümü kurtardım. Teşekkür ederim. –

0

Bu sorun için herhangi biri buraya geliyorsa, bu çözüm ona yardımcı olabilir.

Verilerin yapılması Statik içerikler ve içeriğinin doğrudan İçerik yönetim modülünün içinden kullanılması, bu sorunu düzeltir. pozisyonuyla görünümünüze kodumu, ayarlanan etiketi deneyin

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