studio recyclerview lista horizontal ejemplo cardview android android-layout android-recyclerview material-design horizontalscrollview

android - lista - recyclerview cardview horizontal



No funciona Notifydatasetchange en RecyclerView con la selección del centro Horizontal Scrollview? (1)

No estoy seguro de que lo obtenga correctamente, pero desea cambiar los datos de una vista de reciclador y restablecer el valor de otro reciclador.

Intenta usar recyclerView.scrollToPosition (INDEX_YOU_WANT_TO_SCROLL_TO);

SI DESEA LOGRAR LA POSICIÓN CENTRAL DEL USO DE LOS DATOS recyclerview.scrollToPosition (arraylist.size () / 2); arrayList en el que se almacenan los datos dibujables

El desplazamiento automático es un problema y también se mueve a una posición específica mediante el uso de un código que es difícil.

Estoy haciendo que dos recicladores sean dependientes entre sí con el desplazamiento horizontal y la selección central.

Así que mi problema es usar el método de Notifydatasetchanged y restablecer la posición de recyclerView en 0 y su rango de selección de desplazamiento porque está volviendo el índice incorrecto ...

Cuando quiero obtener el índice de selección del centro después de cambiar los datos. Estoy usando el ejemplo siguiente para lograr esto con algunas ediciones.

Obtener el elemento visible del centro de RecycleView cuando se desplaza

Necesito cambiar los datos en el desplazamiento de First recyclerView Adapter al segundo recyclerView Adapter con cambio de datos.

Pero scrollview estableció la posición en la primera posición. Probé los métodos notifyItemRangeChanged (int, int) notifyItemRangeInserted (int, int) ...

Explicación detallada: estoy cambiando el tipo y restablezco el valor de Look scrollview. Necesito cambiar la posición seleccionada de la vista de desplazamiento inferior. Especialmente no puedo obtener la posición central cambiando los datos. Significa que si notifico el adaptador, el índice permanecerá como está. Necesito hacerlo funcionar como un adaptador normal después de restablecer los datos.

Gracias por adelantado.

public void getRecyclerview_Type() { final RecyclerView recyclerView_Type = (RecyclerView) findViewById(R.id.recycleView); if (recyclerView_Type != null) { recyclerView_Type.postDelayed(new Runnable() { @Override public void run() { setTypeValue(); } }, 300); recyclerView_Type.postDelayed(new Runnable() { @Override public void run() { // recyclerView_Type.smoothScrollToPosition(Type_Adapter.getItemCount() - 1); setTypeValue(); } }, 5000); } ViewTreeObserver treeObserver = recyclerView_Type.getViewTreeObserver(); treeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { recyclerView_Type.getViewTreeObserver().removeOnPreDrawListener(this); finalWidthDate = recyclerView_Type.getMeasuredWidth(); itemWidthDate = getResources().getDimension(R.dimen.item_dob_width_padding); paddingDate = (finalWidthDate - itemWidthDate) / 2; firstItemWidthDate = paddingDate; allPixelsDate = 0; final LinearLayoutManager dateLayoutManager = new LinearLayoutManager(getApplicationContext()); dateLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerView_Type.setLayoutManager(dateLayoutManager); recyclerView_Type.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); synchronized (this) { if (newState == RecyclerView.SCROLL_STATE_IDLE) { calculatePositionAndScroll_Type(recyclerView); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); allPixelsDate += dx; } }); if (mTypeBeanArrayList == null) { mTypeBeanArrayList = new ArrayList<>(); } getMedicationType(); Type_Adapter = new Medication_Type_RecyclerAdapter(Add_Reminder_medicationlook_Activity.this, mTypeBeanArrayList, (int) firstItemWidthDate); recyclerView_Type.setAdapter(Type_Adapter); Type_Adapter.setSelecteditem(Type_Adapter.getItemCount() - 1); return true; } }); } private void getMedicationType() { for (int i = 0; i < mTypeBeanArrayList.size(); i++) { Medication_TypeBean medication_typeBean = mTypeBeanArrayList.get(i); Log.print("Image name :" +medication_typeBean.getType_image_name()); if (i == 0 || i == (mTypeBeanArrayList.size() - 1)) { medication_typeBean.setType(VIEW_TYPE_PADDING); } else { medication_typeBean.setType(VIEW_TYPE_ITEM); } mTypeBeanArrayList.set(i, medication_typeBean); } }

/ * esto si es más importante, si se esperaPositionDate <0 recyclerView volverá al artículo más cercano * /

private void calculatePositionAndScroll_Type(RecyclerView recyclerView) { int expectedPositionDate = Math.round((allPixelsDate + paddingDate - firstItemWidthDate) / itemWidthDate); if (expectedPositionDate == -1) { expectedPositionDate = 0; } else if (expectedPositionDate >= recyclerView.getAdapter().getItemCount() - 2) { expectedPositionDate--; } scrollListToPosition_Type(recyclerView, expectedPositionDate); } /* this if most important, if expectedPositionDate < 0 recyclerView will return to nearest item*/ private void scrollListToPosition_Type(RecyclerView recyclerView, int expectedPositionDate) { float targetScrollPosDate = expectedPositionDate * itemWidthDate + firstItemWidthDate - paddingDate; float missingPxDate = targetScrollPosDate - allPixelsDate; if (missingPxDate != 0) { recyclerView.smoothScrollBy((int) missingPxDate, 0); } setTypeValue(); } private void setTypeValue() { int expectedPositionDateColor = Math.round((allPixelsDate + paddingDate - firstItemWidthDate) / itemWidthDate); int setColorDate = expectedPositionDateColor + 1; Type_Adapter.setSelecteditem(setColorDate); mTxt_type_name.setText(mTypeBeanArrayList.get(setColorDate).getMedication_type_name()); mSELECTED_TYPE_ID = setColorDate; //NotifyLookChangetoType(setColorDate); }

// Adaptador de tipo

public class Medication_Type_RecyclerAdapter extends RecyclerView.Adapter<Medication_Type_RecyclerAdapter.ViewHolder> { private ArrayList<Medication_TypeBean> medication_typeBeanArrayList; private static final int VIEW_TYPE_PADDING = 1; private static final int VIEW_TYPE_ITEM = 2; private int paddingWidthDate = 0; private Context mContext; private int selectedItem = -1; public Medication_Type_RecyclerAdapter(Context context, ArrayList<Medication_TypeBean> dateData, int paddingWidthDate) { this.medication_typeBeanArrayList = dateData; this.paddingWidthDate = paddingWidthDate; this.mContext = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_ITEM) { final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_medication_type, parent, false); return new ViewHolder(view); } else { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_medication_type, parent, false); RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); layoutParams.width = paddingWidthDate; view.setLayoutParams(layoutParams); return new ViewHolder(view); } } @Override public void onBindViewHolder(ViewHolder holder, int position) { Medication_TypeBean medication_typeBean = mTypeBeanArrayList.get(position); if (getItemViewType(position) == VIEW_TYPE_ITEM) { // holder.mTxt_Type.setText(medication_typeBean.getMedication_type_name()); //holder.mTxt_Type.setVisibility(View.VISIBLE); holder.mImg_medication.setVisibility(View.VISIBLE); int d = R.drawable.ic_type_pill; try { //Due to Offline requirements we do code like this get the images from our res folder if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_pill")) { d = R.drawable.ic_type_pill; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_patch")) { d = R.drawable.ic_type_patch; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_capsule")) { d = R.drawable.ic_type_capsule; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_ring")) { d = R.drawable.ic_type_ring; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_inhaler")) { d = R.drawable.ic_type_inhaler; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_spray")) { d = R.drawable.ic_type_spray; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_bottle")) { d = R.drawable.ic_type_bottle; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_drop")) { d = R.drawable.ic_type_drop; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_pessaries")) { d = R.drawable.ic_type_pessaries; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_sachets")) { d = R.drawable.ic_type_sachets; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_tube")) { d = R.drawable.ic_type_tube; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_suppository")) { d = R.drawable.ic_type_suppository; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_injaction")) { d = R.drawable.ic_type_injaction; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_spoon")) { d = R.drawable.ic_type_spoon; } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_powder")) { d = R.drawable.ic_type_powder; } else { d = R.drawable.ic_type_pill; } Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(), d); holder.mImg_medication.setImageBitmap(icon); } catch (Exception e) { Log.print(e); } // BitmapDrawable ob = new BitmapDrawable(mContext.getResources(), icon); // img.setBackgroundDrawable(ob); // holder.mImg_medication.setBackground(ob); // Log.print("Type Adapter", "default " + position + ", selected " + selectedItem); if (position == selectedItem) { Log.print("Type adapter", "center" + position); // holder.mTxt_Type.setTextColor(Color.parseColor("#76FF03")); //holder.mImg_medication.setColorFilter(Color.GREEN); // holder.mTxt_Type.setTextSize(35); holder.mImg_medication.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) + 10; holder.mImg_medication.getLayoutParams().width = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) + 10; } else { holder.mImg_medication.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; holder.mImg_medication.getLayoutParams().width = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; // holder.mTxt_Type.setTextColor(Color.WHITE); //holder.mImg_medication.setColorFilter(null); // holder.mTxt_Type.setVisibility(View.INVISIBLE); // holder.mTxt_Type.setTextSize(18); // holder.mImg_medication.getLayoutParams().height = 70; // holder.mImg_medication.getLayoutParams().width = 70; } } else { holder.mImg_medication.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; holder.mImg_medication.getLayoutParams().width = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; // holder.mTxt_Type.setVisibility(View.INVISIBLE); holder.mImg_medication.setVisibility(View.INVISIBLE); } } public void setSelecteditem(int selecteditem) { this.selectedItem = selecteditem; notifyDataSetChanged(); if (medication_lookBeanArrayList != null && Look_Adapter != null) { NotifyLookChangetoType(selecteditem); } } public int getSelecteditem() { return selectedItem; } @Override public int getItemCount() { return medication_typeBeanArrayList.size(); } @Override public int getItemViewType(int position) { Medication_TypeBean medication_typeBean = medication_typeBeanArrayList.get(position); if (medication_typeBean.getType() == VIEW_TYPE_PADDING) { return VIEW_TYPE_PADDING; } else { return VIEW_TYPE_ITEM; } } public class ViewHolder extends RecyclerView.ViewHolder { //public TextView mTxt_Type; public ImageView mImg_medication; public ViewHolder(View itemView) { super(itemView); // mTxt_Type = (TextView) itemView.findViewById(R.id.mTxt); mImg_medication = (ImageView) itemView.findViewById(R.id.mImg_medication); } } } //Type Adapter ends ************************************************