使用环境:
简单使用到databinding的时候
使用方法:
<?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。
写的挺垃圾,但是几次过后可以直接复制并做略微修改使用了。