对RecyclerView的简单封装使用

import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class RecyclerViewWrapper {
    private AppCompatActivity appCompatActivity;
    @IdRes
    private int recyclerViewId;
    @LayoutRes
    private int itemViewId;
    @NonNull
    private RecyclerView.LayoutManager layoutManager;
    @Nullable
    private ItemViewBuilder itemViewBuilder;

    private RecyclerView recyclerView;
    private Adapter adapter;

    public RecyclerView getRecyclerView() {
        return recyclerView;
    }

    public Adapter getAdapter() {
        return adapter;
    }

    private RecyclerViewWrapper(Builder builder) {
        appCompatActivity = builder.appCompatActivity;
        recyclerViewId = builder.recyclerViewId;
        itemViewId = builder.itemViewId;
        layoutManager = builder.layoutManager;
        itemViewBuilder = builder.itemViewBuilder;
        recyclerView = appCompatActivity.findViewById(recyclerViewId);
        adapter = new Adapter(itemViewBuilder, itemViewId);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adapter);
    }

    public void update() {
        adapter.notifyDataSetChanged();
    }

    public class Adapter extends RecyclerView.Adapter {
        private ItemViewBuilder itemViewBuilder;
        private int itemViewId;

        private Adapter(ItemViewBuilder itemViewBuilder, @LayoutRes int itemViewId) {
            this.itemViewBuilder = itemViewBuilder;
            this.itemViewId = itemViewId;
        }

        @NonNull
        @Override
        public MViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(this.itemViewId, viewGroup, false);
            return new MViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull MViewHolder mViewHolder, int i) {
            final int position = i;
            itemViewBuilder.onBindItemView(mViewHolder.itemView, position);
            mViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    itemViewBuilder.onClick(v, position);
                }
            });
            mViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    itemViewBuilder.onLongClick(v, position);
                    return true;
                }
            });
        }

        @Override
        public int getItemCount() {
            return itemViewBuilder.getItemCount();
        }
    }

    class MViewHolder extends RecyclerView.ViewHolder {

        MViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }

    public interface ItemViewBuilder {
        void onBindItemView(View itemView, int position);

        int getItemCount();

        void onClick(View v, int clickPosition);

        void onLongClick(View v, int longClickPosition);
    }

    public static final class Builder {
        private AppCompatActivity appCompatActivity;
        private int recyclerViewId;
        private int itemViewId;
        private RecyclerView.LayoutManager layoutManager;
        private ItemViewBuilder itemViewBuilder;

        Builder() {
        }

        public Builder appCompatActivity(AppCompatActivity val) {
            appCompatActivity = val;
            return this;
        }

        public Builder recyclerViewId(int val) {
            recyclerViewId = val;
            return this;
        }

        public Builder itemViewId(int val) {
            itemViewId = val;
            return this;
        }

        public Builder layoutManager(RecyclerView.LayoutManager val) {
            layoutManager = val;
            return this;
        }

        public Builder itemViewBuilder(ItemViewBuilder val) {
            itemViewBuilder = val;
            return this;
        }

        public RecyclerViewWrapper build() {
            return new RecyclerViewWrapper(this);
        }
    }
}

使用例子:

主页面布局




    

item_view




    

Activity

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.view.View;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private List list = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list.add("0");
        list.add("1");
        RecyclerViewWrapper recyclerViewWrapper = new RecyclerViewWrapper.Builder()
                .layoutManager(new GridLayoutManager(this, 2))
                .itemViewId(R.layout.item_view)
                .recyclerViewId(R.id.recyclerView)
                .appCompatActivity(this)
                .itemViewBuilder(new RecyclerViewWrapper.ItemViewBuilder() {
                    @Override
                    public void onBindItemView(View itemView, int position) {
                        TextView textView = itemView.findViewById(R.id.textView);
                        textView.setText(list.get(position));
                    }

                    @Override
                    public int getItemCount() {
                        return list.size();
                    }

                    @Override
                    public void onClick(View v, int clickPosition) {

                    }

                    @Override
                    public void onLongClick(View v, int longClickPosition) {

                    }
                }).build();
    }
}

 

你可能感兴趣的:(Android)