2016-09-12 10 views
0

サムネイルをクリックしたときにrecyclerviewonClicklistenerがあります。ImageViewを削除しますが、この効果はリスト内の8つのアイテムごとにあるため、8番目のサムネイルが消えます。8個のアイテムごとにリサイクルビューで効果を表示する

マイアダプタ:

public class BarListAdapter extends RecyclerView.Adapter<BarListAdapter.BarListViewHolder> { 

    private List<Bar> bars; 
    private int rowLayout; 
    private Context context; 
    private BarViewHolderClicks clickListener; 

    public BarListAdapter(List<Bar> bars, int rowLayout, Context context, BarViewHolderClicks clickListener) { 
     this.bars = bars; 
     this.rowLayout = rowLayout; 
     this.context = context; 
     this.clickListener = clickListener; 
    } 

    @Override 
    public BarListAdapter.BarListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false); 
     return new BarListViewHolder(view, clickListener); 
    } 

    @Override 
    public void onBindViewHolder(final BarListViewHolder holder, final int position) { 
     holder.barNameView.setText(bars.get(position).getName()); 
     holder.position = position; 
     holder.lastVideoTimeView.setText(bars.get(position).getCaptureTime()); 
     if (bars.get(position).isWatched()) { 
      holder.thumbnailView.setVisibility(View.GONE); 
     } else { 
      setThumbnail(holder, position); 
     } 
    } 

    public void changeStatusToWatched(int position){ 
     bars.get(position).setWatched(true); 
     notifyDataSetChanged(); 
    } 

    private void setThumbnail(BarListViewHolder holder, int position) { 
     Picasso.with(context).load(bars.get(position).getThumbnailUrl()) 
       .placeholder(R.drawable.webcam).error(R.drawable.webcam) 
       .resize(50, 50).centerCrop().into(holder.thumbnailView); 
    } 

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

    public static class BarListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public BarViewHolderClicks clickListener; 
     View itemLayout; 
     TextView barNameView; 
     TextView lastVideoTimeView; 
     RoundedImageView thumbnailView; 
     CheckBox barCheckbox; 
     int position; 

     public BarListViewHolder(View v, BarViewHolderClicks listener) { 
      super(v); 
      this.clickListener = listener; 
      barNameView = (TextView) v.findViewById(R.id.bar_name); 
      thumbnailView = (RoundedImageView) v.findViewById(R.id.video_thumbnail); 
      itemLayout = v.findViewById(R.id.item_lahyout); 
      lastVideoTimeView = (TextView) v.findViewById(R.id.last_video_time); 
      itemLayout.setOnClickListener(this); 
      thumbnailView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if (v instanceof ImageView) { 
       clickListener.onThumbnailClick(position); 
      } else { 
       clickListener.onLayoutClick(position); 
      } 
     } 
    } 
} 

そして、ここでは、活動の使い方です:

final List<Bar> bars = application.getAllBars(); 
     int topBarsSize = application.getTopBars().size(); 

     BarViewHolderClicks clickListener = new BarViewHolderClicks() { 
      @Override 
      public void onLayoutClick(int position) { 
       SMSLogger.i("on layout click for position " + position); 
       Intent intent = new Intent(MainActivity.this, BarDetailsActivity.class); 

       intent.putExtra(IntentConstants.SELECTED_BAR_POSITION, position); 
       startActivity(intent); 
      } 

      @Override 
      public void onThumbnailClick(int position) { 
       SMSLogger.i("on thumbnail click for position " + position); 
       barListAdapter.changeStatusToWatched(position); 
       Intent intent = new Intent(MainActivity.this, PlayVideoActivity.class); 
       intent.putExtra(IntentConstants.SELECTED_BAR_POSITION, position); 
       startActivity(intent); 
      } 
     }; 

     barListAdapter = 
       new BarListAdapter(bars, R.layout.bar_item_layout, this, clickListener); 

     recViewBars.setAdapter(barListAdapter); 

あなたが任意のアイデアを持っている場合は、それらを聞くのはいいだろう:)

+0

onThumbnailなぜ別のアクティビティを開始するのですか? あなたの正確な要件は何ですか? –

+0

これはインポートできません。バーの名前だけで新しいアクティビティが開きます。何も特別なことはありません。 – user6822028

答えて

0

問題がありますサムネイル画像を非表示にすると、コード内のメソッドonBindViewHolder()が表示されます

holder.thumbnailView.setVisibility(View.GONE); 

Recyclerviewは毎回新しいレイアウトインスタンスを使用せず、リサイクルされたレイアウトを再利用します。ですから、あなたはshow/hideで遊ぶべきです。

サムネイル画像をレイアウトに設定し、単に画像を表示/非表示にします。

if (bars.get(position).isWatched()) { 
    holder.thumbnailView.setVisibility(View.GONE); 
} else { 
    holder.thumbnailView.setVisibility(View.VISIBLE); 
} 

お待ちしています。

私に知らせてください。

+0

それだけです!ありがとうございました! – user6822028

+0

それは素晴らしいです!大歓迎!! –

+0

ありがとうございます:) – user6822028

関連する問題