Intereting Posts
LargeHeap = истинный манифест не работает? Какие функции имеют Прогрессивные веб-приложения для родных приложений и наоборот, на Android Как загрузить несколько андроидных архивов (по одному на каждый вкус) Использовать пустой пароль хранилища ключей, который был возможен? Что в TtsService могло объяснить отсутствие onUtteranceCompleted () для playEarcon ()? Vuforia против Metaio SDK против ARKit против D'Fusion Mobile против Layar SDK Как я могу использовать Android Face Unlock в своем личном приложении? Снимите флажок с RadioButton в RadioButtonGroup Ошибка Null указателя с помощью hideSoftInputFromWindow Приложение не указывает уровень API Как заставить текст исчезать и исчезать в Android? Не удается разрешить символ GooglePlayServicesClient в новом проекте Android Studio Восприятие сходства между двумя аудиопоследовательностями Не удается разрешить символ «Auth» для интеграции google в студии Android Как создать файл Pdf с изображением в Android?

Нужен пример о RecyclerView.Adapter.notifyItemChanged (int position, полезная нагрузка Object)

Во-первых, извините за мой английский. Согласно документации RecyclerView о medthod notifyItemChanged (int position, полезная нагрузка Object)

Сообщите зарегистрированным наблюдателям, что элемент в позиции изменился с помощью дополнительного объекта полезной нагрузки.

Я не понимаю, как использовать вторую payload в этом методе. Я искал много документов о «полезной нагрузке», но все было неоднозначно.

Итак, если вы знаете об этом методе, пожалуйста, покажите мне ясный пример. Большое спасибо.

Solutions Collecting From Web of "Нужен пример о RecyclerView.Adapter.notifyItemChanged (int position, полезная нагрузка Object)"

Проверьте этот пример кода, демонстрирующий эту функцию. Это RecyclerView который вызывает notifyItemChanged(position, payload) при щелчке элемента в позиции position . Вы можете проверить, что onBindViewHolder(holder, position, payload) был вызван, ища инструкцию logcat.

Убедитесь, что вы используете как минимум версию 23.1.1 библиотек поддержки, например:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:recyclerview-v7:23.1.1' compile 'com.android.support:cardview-v7:23.1.1' } 

HelloActivity.java

 package com.formagrid.hellotest; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.CardView; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; public class HelloActivity extends Activity { private RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); mRecyclerView.setAdapter(new HelloAdapter()); DefaultItemAnimator animator = new DefaultItemAnimator() { @Override public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) { return true; } }; mRecyclerView.setItemAnimator(animator); } private static class HelloAdapter extends RecyclerView.Adapter<HelloAdapter.HelloViewHolder> { public class HelloViewHolder extends RecyclerView.ViewHolder { public TextView textView; public HelloViewHolder(CardView cardView) { super(cardView); textView = (TextView) cardView.findViewById(R.id.text_view); } } @Override public HelloViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate( R.layout.card_item, parent, false); return new HelloViewHolder(cardView); } @Override public void onBindViewHolder(HelloViewHolder holder, int position) { bind(holder); } @Override public void onBindViewHolder(HelloViewHolder holder, int position, List<Object> payload) { Log.d("butt", "payload " + payload.toString()); bind(holder); } @Override public int getItemCount() { return 20; } private void bind(final HelloViewHolder holder) { holder.textView.setText("item " + holder.getAdapterPosition()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final int position = holder.getAdapterPosition(); Log.d("butt", "click " + position); HelloAdapter.this.notifyItemChanged(position, "payload " + position); } }); } } } 

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".HelloActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout> 

card_item.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="100dip" android:layout_margin="5dip" card_view:cardElevation="5dip"> <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v7.widget.CardView> 

Если вы хотите обновить не весь вид владельца, а только часть его , этот метод вам нужен.

Изображение, которое у вас есть после ViewHolder

 public class ViewHolder extends RecyclerView.ViewHolder { public final TextView tvName; public final TextView tvScore; public ViewHolder(View view) { super(view); tvName = (TextView) view.findViewById(R.id.tv_name); tvScore = (TextView) view.findViewById(R.id.tv_score); } } 

И где-то в вашем коде вы вызываете адаптер для обновления одного TextView – tvScore

 mRecyclerViewAdapter.notifyItemChanged(position, new Integer(4533)); 

[…]

OnBindViewHolder (держатель ViewHolder, позиция int, список полезных нагрузок) сначала вызывает отзыв . Вы должны позаботиться о super.onBindViewHolder (владелец, должность, полезная нагрузка); В противном случае ваши другие представления не будут обновляться при прокрутке, а onBindViewHolder (держатель ViewHolder, позиция int) не будет вызываться.

 @Override public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) { if(!payloads.isEmpty()) { if (payloads.get(0) instanceof Integer) { holder.tvScore.setText(String.valueOf((Integer)payloads.get(0))) } }else { super.onBindViewHolder(holder,position, payloads); } } 

Вы можете передать «необязательный объект полезной нагрузки», когда просто хотите выполнить частичное обновление данных в ViewHolder при onBindViewHolder метода onBindViewHolder . Однако он не уверен, что полезная нагрузка всегда будет передана, например, если представление не подключено, поэтому вы должны выполнить еще несколько проверок.

В любом случае, если вы пройдете null будет выполнено полное обновление элемента, и вам не придется беспокоиться об этом.