Не работает Notifydatasetchange на RecyclerView с выбором центра Горизонтальное прокрутка?

Автоматическая прокрутка является проблемой, а также перемещение в определенную позицию с использованием кода затруднено.

Я делаю два recyclerView зависимыми друг от друга с выбором горизонтальной прокрутки и центра.

Таким образом, моя проблема заключается в использовании метода Notifydatasetchanged и реселлинга recyclerView postion до 0, и это диапазон выбора прокрутки, потому что он возвращает неверный индекс …

Когда я хочу получить индекс выбора центра после изменения данных. Я использую ниже пример, чтобы добиться этого с некоторыми изменениями.

Получить центр видимого элемента RecycleView при прокрутке

Мне нужно изменить данные прокрутки First recyclerView Adapter на второй адаптер recyclerView с изменением данных.

Но scrollview установил позицию в первой позиции, я попробовал методы notifyItemRangeChanged (int, int) notifyItemRangeInserted (int, int) …

Подробное объяснение. Я меняю тип и сброшу значение Look scrollview. Мне нужно изменить выбранную позицию нижнего прокрутки. Специально я не могу получить центральную позицию, изменяя данные. Означает I, если я уведомляю адаптер, что индекс останется таким, какой он есть. Мне нужно выполнить работу как обычный адаптер после сброса данных.

Заранее спасибо.

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); } } 

/ * Это если наиболее важно, если ожидаетсяPositionDate <0 recyclerView вернется к ближайшему товару * /

 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); } 

// Тип адаптера

  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 ************************************************ 

Введите описание изображения здесь

Я не уверен, что получаю вас правильно, но вы хотите изменить данные одного recyclerview и сбросить значение другого recyclerview

Попробуйте использовать recyclerView.scrollToPosition (INDEX_YOU_WANT_TO_SCROLL_TO);

ЕСЛИ ВЫ ХОТИТЕ ДОСТУПАТЬ ЦЕНТР ПОЛОЖЕНИЯ ДАННЫХ ИСПОЛЬЗОВАНИЯ recyclerview.scrollToPosition (arraylist.size () / 2); ArrayList, в котором хранятся ваши доступные данные

Intereting Posts
Android C2DM: Дублировать сообщение на одно и то же устройство и приложение Как подчеркнуть текст в TextView с каким-то другим цветом, чем текст? Для Android AppCompat требуется уровень API 11 Стиль андроида – кнопка Как получить ряд строк в Android? Как получить температуру батареи в android Доступ к стене на стене Facebook? Как получить список предварительно установленных включенных / отключенных приложений в android Android Authenticator запускает экран входа в систему, когда нет учетной записи Есть ли способ проверить версию приложения Play Store VersionCode? Каков хороший способ ограничить количество слов, которые могут быть введены в андроид EditText? Как добавить текст под кнопкой изображения в Android? Обнаружение устройства Bluetooth без подключения к нему в Android Текстуры отображаются только на некоторых устройствах Есть ли простой способ измерения расстояния между точкой и группой VectorDrawable?