Need an example about RecyclerView.Adapter.notifyItemChanged(int position, Object payload)

后端 未结 4 1093
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-01 02:05

According to RecyclerView documentation about medthod notifyItemChanged(int position, Object payload)

Notify any registered observers th

4条回答
  •  孤街浪徒
    2020-12-01 02:33

    Check out this sample code that demonstrates the feature. It's a RecyclerView that calls notifyItemChanged(position, payload) when the item at position position is clicked. You can verify that onBindViewHolder(holder, position, payload) was called by looking for the logcat statement.

    Make sure you are using at least version 23.1.1 of the support libraries, like so:

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

    
    
        
    
    
    

    card_item.xml

    
    
    
        
    
    
    

    提交回复
    热议问题