Retener el efecto de ondulación durante la notificación

Estoy empezando a modificar mi aplicación para apoyar a lollipop. Básicamente tengo un fragmento de navegador de archivos con recyclerview, cuando el usuario abra este fragmento verá todas las carpetas en su directorio raíz, cuando el usuario haga clic en la carpeta que necesito para obtener todas las subcarpetas + archivos y mostrarlos al usuario utilizando Mismo reciclado con notificación. La funcionalidad que funciona correctamente el problema es cuando el usuario hace clic en una carpeta que el efecto de rizado no se retiene durante la notificación.

file_item.xml <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/file_name" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/selectableItemBackground" android:clickable="true" android:drawablePadding="15dp" android:ellipsize="marquee" android:focusable="true" android:gravity="center_vertical" android:minHeight="?android:attr/listPreferredItemHeight" android:paddingLeft="14dip" android:paddingRight="15dip" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="?android:attr/textColorAlertDialogListItem" /> Recyclerview adapter: public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.CustomViewHolder>{ private List<Item> _data; private Context _context; private IFileListener _listener; public RecycleAdapter(Context context, List<Item> data,IFileListener listener) { _data = data; _context = context; _listener = listener; } public void setData(List<Item> data) { _data = data; notifyDataSetChanged(); } @Override public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(_context).inflate(R.layout.file_item, viewGroup,false); CustomViewHolder viewHolder = new CustomViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(CustomViewHolder customViewHolder, int i) { final Item file = _data.get(i); //Setting text view title customViewHolder.textView.setText(file._fileName); customViewHolder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { _listener.onFileClickListener(file._fileName); } }); // customViewHolder.textView.setOnTouchListener(new View.OnTouchListener() { // @Override // public boolean onTouch(View v, MotionEvent event) { // // switch (event.getActionMasked()) // { // case MotionEvent.ACTION_UP: // _listener.onFileClickListener(file._fileName); // break; // } // return false; // } // }); // customViewHolder.textView.setOnTouchListener(new View.OnTouchListener() { // @TargetApi(Build.VERSION_CODES.LOLLIPOP) // @Override // public boolean onTouch(View v, MotionEvent event) { // v.getBackground().setHotspot(event.getX(), event.getY()); // // return(false); // } // }); if (file._isFolder) { customViewHolder.textView.setCompoundDrawablesWithIntrinsicBounds( R.drawable.directory_icon, 0, 0, 0); } else { customViewHolder.textView.setCompoundDrawablesWithIntrinsicBounds( R.drawable.file_icon, 0, 0, 0); } } @Override public int getItemCount() { return (null != _data ? _data.size() : 0); } public class CustomViewHolder extends RecyclerView.ViewHolder { protected TextView textView; public CustomViewHolder(View view) { super(view); this.textView = (TextView) view.findViewById(R.id.file_name); } } public interface IFileListener { public void onFileClickListener(String file); } } 

Echa un vistazo a la respuesta aquí:

https://stackoverflow.com/a/34523222/1847734

En su método onClick (asumiendo que en su devolución de llamada), asegúrese de no llamar a notifyDataSetChanged() después de notifyItemChanged(position) .

notifyDataSetChanged() entrará en conflicto con esos efectos de ripple predeterminados.

 new recyclerAdapter.ClickListener() { @Override public void onClick(int position) { ... awesome item onClick code ... notifyItemChanged(position); //notifyDataSetChanged(); <//--- Causes the no ripple bug } }; 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.