2016-12-28 12 views
0

私はリサイクルビューを保持するフラグメントを持っています。アイテムをタップすると、アクティビティへのシーン遷移のためにテキストビューが消えてしまいます。戻るボタンを押してフラグメントに戻ると、recyclerviewアイテムのテキストがフェードインするはずです。問題は、これがrecyclerviewの最初のアイテムに対してのみ機能することです。他のアイテムについては、テキストはフェードアウトしますが、フラグメントに戻ったときには表示されません。Transition ManagerがRecyclerViewで機能しないテキストフェードイン

アダプタのonBindViewHolderでtoggleVisibilityメソッドの呼び出し:

holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String imageTransitionName = context.getString(R.string.timeline_item_transition_image); 

       Pair imagePair = new Pair<>(view.findViewById(R.id.timeline_image_framelayout), imageTransitionName); 

       ActivityOptionsCompat optionsCompat = 
         ActivityOptionsCompat.makeSceneTransitionAnimation(mUpcomingEventsFragment.getActivity(), 
         imagePair); 
       toggleVisibility(holder.itemView, false); 

       view.getContext().startActivity(EventDetailActivity.newIntent(context, 
         (Event) mTimelineItemList.get(holder.getAdapterPosition())), optionsCompat.toBundle()); 

      } 
     }); 

とTransitionManagerののフェードと方法:

public void toggleVisibility(View view, boolean visible) { 
    TransitionManager.beginDelayedTransition((ViewGroup) view, new Fade()); 
    TextView timeText = (TextView) view.findViewById(R.id.event_time); 
    TextView titleText = (TextView) view.findViewById(R.id.event_title); 
    timeText.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); 
    titleText.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); 
} 

は、私はフラグメントが再開したときに、toggleVisibilityメソッドを呼び出しmUpcomingEventsAdapter.toggleVisibility(mRecyclerView, true); が、私の問題があるのです私がフラグメントに戻ったときに、recyclerviewから選択されたアイテムに可視性を正しく設定する方法がわかりません。

答えて

0

リサイクラビューには、すべてのテキストビューで同じIDを持つ複数のビューが含まれています(リサイクラビューは各アイテムのビューを再利用します)。それを変更しようとすると、それは1つのビューの可視性だけを変更する理由です。

あなたはこのような何か行うことができます:

アダプタにtoggleAllVisibilitiesメソッドを追加します。

public void toggleAllVisibilities(boolean visible) { 
    this.visible = visible; 
    this.notifyDataSetChanged(); 
} 

notifyDatasetChanged法()を含むデータが変更されたこと、recyclerview-アダプタを伝え、それを思い出す必要がありますが各項目のonBindViewHolder。 visibleは、アダプタのグローバル変数である必要があります。

これで、元のtoggleVisibilityメソッドで各アイテムの表示をonBindViewholderに設定できるようになりました。 toggleVisibility(holder.itemView、visible);

+0

ありがとう、これは良い解決策のように見えます。最終的には、onBindViewHolderから位置を取得するために、アダプターにpublic getPosition()メソッドを追加します。そうすれば、私は、既にrecyclerview.getLayoutManager()。findViewByPosition(int position)を使ってViewHolderの可視性を、私がすでに持っていた方法で切り替えることができます。これが高すぎるかどうか分からないので、私はあなたの提案に何が最善のものかを見てもらうことにします。再度、感謝します! – TonyKazanjian

関連する問題