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); } }
- La ondulación se dibuja a continuación ImageView
- Obtenga el efecto de ondulación en RecyclerView con elementos que contengan otro color de fondo
- Efecto ondulado en estado prensado + transparencia en estado normal
- Cómo construir apache cordova proyecto desde la línea de comandos?
- IllegalStateException utilizando la biblioteca de efectos Ripple en dispositivos Android M
- Crear una ondulación dibujable sin transparencia
- Efecto de ondulación sobre un elemento de RecyclerView que contiene ImageView
- Ripple Emulator + proyecto androide con PhoneGap
- Notificación de pantalla de bloqueo de Android Vista personalizada con ripple y doble toque
- Leer archivo local en Phonegap
- Problemas con el fondo TabLayout de la biblioteca de diseño de Android
- Efecto de ondulación de Android anulado por el estado seleccionado
- Establecer el efecto de ondulación en la vista de imagen
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 } };