2017-02-16 7 views
1

Я пытаюсь реализовать удаление с помощью прокрутки в RecyclerView. После того, как элемент swiped, я вызываю notifyItemChanged() и изменяю видимость представлений в методе onBindViewHolder.RecyclerView изменения высоты элемента после вызова метода setVisibility()

public void onBindViewHolder(CustomViewHolder holder, int position) { 
    if (isPendingRemoval(position)) { 
     holder.textView.setVisibility(View.INVISIBLE);    
     holder.undoButton.setVisibility(View.VISIBLE); 

     final int adapterPosition = holder.getAdapterPosition(); 

     holder.undoButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Runnable pendingRemovalRunnable = mPendingRunnables.get(adapterPosition); 
       mHandler.removeCallbacks(pendingRemovalRunnable); 
       mPendingRunnables.remove(adapterPosition); 
       notifyItemChanged(adapterPosition); 
      } 
     }); 

    } else { 
     holder.textView.setVisibility(View.VISIBLE);    
     holder.undoButton.setVisibility(View.INVISIBLE); 
     holder.textView.setText(someText);    
    } 
} 

Но после этого изменения высоты удаленной позиции. screenshot

item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="8dp" 
    android:paddingBottom="8dp" 
    android:paddingRight="8dp" 
    android:paddingLeft="@dimen/activity_horizontal_margin"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/item_text" 
     android:layout_gravity="center_vertical"/> 
    <Button 
     android:id="@+id/item_button_undo" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@string/button_undo_text" 
     android:layout_gravity="end|center_vertical" 
     style="@style/Base.Widget.AppCompat.Button.Borderless"/> 
</FrameLayout> 

Что я могу сделать, чтобы сохранить высоту элемента?

+0

Где.? Я не вижу никаких проблем при съемке экрана. –

+0

. Я хочу, чтобы высота была одинаковой. – Vlad

ответ

0

Вы можете попытаться установить ширину кнопки match_parent и просто изменить ее видимость, а не только текст TextView (который, по-видимому, дает высоту элемента), таким образом элемент должен сохранять высоту и ширину, а кнопка должна быть видимым над TextView, скрывающим его

public void onBindViewHolder(CustomViewHolder holder, int position) { 
    if (isPendingRemoval(position)) { 
     // holder.textView.setVisibility(View.INVISIBLE);    
     holder.undoButton.setVisibility(View.VISIBLE); 

     final int adapterPosition = holder.getAdapterPosition(); 

     holder.undoButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Runnable pendingRemovalRunnable = mPendingRunnables.get(adapterPosition); 
       mHandler.removeCallbacks(pendingRemovalRunnable); 
       mPendingRunnables.remove(adapterPosition); 
       notifyItemChanged(adapterPosition); 
      } 
     }); 

    } else { 
     // holder.textView.setVisibility(View.VISIBLE);    
     holder.undoButton.setVisibility(View.INVISIBLE); 
     holder.textView.setText(someText);    
    } 
} 
+0

. Она работает, если используется символ holder.textView.setText() после изменения видимости кнопки. – Vlad

 Смежные вопросы

  • Нет связанных вопросов^_^