2016-12-28 18 views
0

我有一個片段持有recyclerview,當我點擊一個項目,我希望其中的文字瀏覽淡出爲現場過渡到一個活動。當我點擊返回按鈕回到片段時,recyclerview項目中的文本應該淡入。問題是,這隻適用於回收站視圖中的第一項。對於任何其他項目,文本淡出,但在回到片段時保持不可見狀態。在適配器的onBindViewHolder文字淡入與轉換管理器不工作與RecyclerView

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(回收站視圖重用每個項目的視圖)。這就是爲什麼當您嘗試更改視圖時,它只會更改一個視圖的可見性。

你可以做這樣的事情:

添加toggleAllVisibilities方法適配器:

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

的方法notifyDatasetChanged()告訴recyclerview適配器,改變了包含數據,它應該召回onBindViewHolder爲每個項目。 可見應該是您的適配器中的全局變量。

現在您可以在onBindViewholder中使用原始toggleVisibility方法設置每個項目的可見性。 toggleVisibility(holder.itemView,visible);

+0

謝謝,這看起來像一個很好的解決方案。我最終做的是在適配器中添加一個public getPosition()方法,以便從onBindViewHolder獲取位置。在片段中,我可以通過使用recyclerview.getLayoutManager()。findViewByPosition(int position)來切換ViewHolder的可見性。不知道這是否太昂貴,所以我也會給你一個建議,看看哪些東西最好。再次感謝! – TonyKazanjian