recycleView之 databinding简单利用

来源:互联网 发布:小榕软件 编辑:程序博客网 时间:2024/06/03 17:45

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android">    <data>        <import type="android.view.View"/>        <variable            name="custom"            type="com.example.administrator.eitherdemo1.CustomScanActivity"/>    </data>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@color/white"        android:gravity="center_horizontal"        android:orientation="vertical">        <LinearLayout            android:layout_width="match_parent"            android:layout_height="@dimen/fifty"            android:orientation="horizontal"            >            <Button                android:id="@+id/btn"                android:layout_weight="1"                android:layout_width="0dp"                android:layout_height="wrap_content"                android:onClick="start"                android:text="@string/add1" />            <Button                android:id="@+id/btn1"                android:layout_weight="1"                android:layout_width="0dp"                android:layout_height="wrap_content"                android:onClick="start1"                android:text="@string/add2" />        </LinearLayout>        <android.support.v7.widget.RecyclerView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:id="@+id/recycler"            android:background="@color/white"            />    </LinearLayout></layout>


mainActivity的代码

public class MainActivity extends BaseActivity {    ActivityMainBinding mainBinding ;    List<User> users = new ArrayList<User>();    List<User> us = new ArrayList<>();    FriendAdapter adapter ;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);        adapter = new FriendAdapter(this,users);        mainBinding.recycler.setLayoutManager(new LinearLayoutManager(this));        mainBinding.recycler.setAdapter(adapter);        adapter.setOnItemClickLitener(new FriendAdapter.OnItemClickLitener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this,"点击当前第"+position+"个条目",Toast.LENGTH_SHORT).show();            }            @Override            public void onItemLongClick(View view, int position) {            }        });    }    public void start(View view){//        customScan();        User user = new User("小明","12","nan");        adapter.addItem(0,user);        us.add(user);    }    public void start1(View view){        User user = new User("小红","16","nv");        adapter.addItem(0,user);        us.add(user);    }    }


3 adpter 中需要注意的

3.1  所有类型的item的父类:

public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder {    public BaseRecyclerViewHolder(View itemView) {        super(itemView);    }    public abstract void bindData(T data);}

3.2 adapter:

思路:   创建两个databinding类型的xml文件作为item各种类型的布局;

             创建两个继承了BaseRecyclerViewHolder的类,相关写法已经展示;

             在OnCreateViewHolder()中返回BaseRecyclerViewHolder;

public class FriendAdapter extends RecyclerView.Adapter<BaseRecyclerViewHolder> {    private List<User> strings;    private Context mcontext;    public FriendAdapter(Context context, List<User> strings) {        this.mcontext = context;        this.strings = strings;    }    @Override    public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        switch (viewType){            case 1:                ItemRecycleBinding recycleBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),R.layout.item_recycle,parent,false);                return new MyViewHolder(recycleBinding);            case 2:                ItemnvBinding itemnvBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),R.layout.itemnv,parent,false);                return new NvViewHolder(itemnvBinding);        }            return null;    }    @Override    public void onBindViewHolder(final BaseRecyclerViewHolder holder, int position) {        holder.bindData(strings.get(position));        if (mOnItemClickLitener != null)        {            holder.itemView.setOnClickListener(new View.OnClickListener()            {                @Override                public void onClick(View v)                {                    int pos = holder.getLayoutPosition();                    mOnItemClickLitener.onItemClick(holder.itemView, pos);                }            });            holder.itemView.setOnLongClickListener(new View.OnLongClickListener()            {                @Override                public boolean onLongClick(View v)                {                    int pos = holder.getLayoutPosition();                    mOnItemClickLitener.onItemLongClick(holder.itemView, pos);                    return false;                }            });        }    }    public interface OnItemClickLitener {        void onItemClick(View view, int position);        void onItemLongClick(View view, int position);    }    private OnItemClickLitener mOnItemClickLitener;    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {        this.mOnItemClickLitener = mOnItemClickLitener;    }    @Override    public int getItemCount() {        return strings.size();    }    public class MyViewHolder extends BaseRecyclerViewHolder<User> {        ItemRecycleBinding recycleBinding;        public MyViewHolder(ViewDataBinding dataBinding) {            super(dataBinding.getRoot());            recycleBinding = (ItemRecycleBinding) dataBinding;        }        @Override        public void bindData(User data) {            recycleBinding.setUser(data);        }    }    public class NvViewHolder extends BaseRecyclerViewHolder<User>{        ItemnvBinding itemnvBinding;        public NvViewHolder(ViewDataBinding viewDataBinding) {            super(viewDataBinding.getRoot());            itemnvBinding = (ItemnvBinding) viewDataBinding;        }        @Override        public void bindData(User data) {            itemnvBinding.setUser(data);        }    }    @Override    public int getItemViewType(int position) {        String sex = strings.get(position).getSex();        if ("nan".equals(sex)) {            return 1;        } else {            return 2;        }    }    public void addItem(int position,User s) {        strings.add(position,s);        notifyItemInserted(position);    }    public void removeItem(int position) {        strings.remove(position);        notifyItemRemoved(position);    }}

3.3 item的简单布局文件:

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android">    <data>        <variable            name="user"            type="com.example.administrator.eitherdemo1.bean.User"/>    </data>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="@dimen/fifty"        android:orientation="horizontal">        <TextView            android:gravity="center"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="match_parent"            android:text="@string/sex"            />        <TextView            android:gravity="center"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="match_parent"            android:id="@+id/textname"            android:text="@{user.name}"            />    </LinearLayout></layout>

两个xml文件一样,不一样的知识内容String。

写的挺垃圾,但是几次过后可以直接复制并做略微修改使用了。



































0 0
原创粉丝点击