1

があり、RecyclerViewその項目をクリックすると新しい が表示されActivityます。ViewPager複数の商品がございます。押し戻すと、現在のアイテムの位置が保存されます。私がやりたいことは、ユーザーが のアイテムの上に立って押し戻すとViewPager、そのアイテムが で強調表示されるはずRecyclerViewです。

問題

アイテムの位置が見えていれば問題ありません。以下を使用して背景を変更します

view = layoutManager.findViewByPosition(Utils.ayat);
if(view != null) {
    LinearLayout parent = (LinearLayout) view.findViewById(R.id.parent);
    parent.setBackgroundColor(Color.GRAY);
}

しかし、アイテムが表示されていない場合、何も起こらず、背景を変更できません。

これまでに行ったこと

  1. 位置までスクロールしてから背景を変更しようとしました。RecyclerView正しくスクロールしていますが、 findViewByPositionnull を返します。
  2. 私の観察から(間違っている可能性があります)、プログラムでスクロールすると、スクロールRecyclerViewされた位置が最後に表示されるアイテムになると思います。私はそれをやろうとしましたが、運がありませんでした。
  3. 多くの人が示唆しているように、置いThread.sleep(100)てから位置を取得しようとしました。これもうまくいきませんでした。

注:onBindViewHolder強調表示される項目が事前に定義されていないため、これを行うことはできません。

4

3 に答える 3

0

試しましたnotifyItemChanged(int position)か?強調表示された項目の位置は、メソッドと呼び出しを介してアダプターに送信できますnotifyItemChanged(int position)。例えば、

int highlightPosition = -1;

    public updateHighlightPosition(int position){
      highlightPosition = position;
      notifyItemChanged(position)
    }

    @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
      if(position == highlightPosition ){
         // You can change the background here
      }else{
        // Set default background
      }
  }
于 2017-04-04T12:23:48.680 に答える