效果图
第一种布局文件
item_title
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="handler"
type="com.example.startkotlin.EventHandler" />
</data>
<Button
android:id="@+id/userbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{handler::onClickFriend}"
android:text="xnxnxnx" />
</layout>
第二种布局
item_user_layout
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="useritem"
type="com.example.startkotlin.User" />
<variable
name="handler"
type="com.example.startkotlin.EventHandler" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{() -> handler.onItemClick(useritem)}"
android:orientation="horizontal"
android:padding="5dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@{useritem.getName}" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text='@{"" +useritem.getAge}' />
</LinearLayout>
</layout>
Java bean
User
public class User {
private String name = "";
private int age = 0;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
事件处理器
EventHandler
public class EventHandler {
private Context mContext;
public EventHandler(Context context) {
mContext = context;
}
public void onClickFriend(View view) {
Toast.makeText(mContext, "onClickFriend", Toast.LENGTH_LONG).show();
}
public void onItemClick(User user) {
Toast.makeText(mContext, "Click " + user.getName() + user.getAge(), Toast.LENGTH_SHORT).show();
}
}
主界面布局
activity_main
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/listAll"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</layout>
适配器
UserAdapter
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> {
private List<User> userList;
private Context context;
public UserAdapter(Context context, List<User> userList) {
this.userList = userList;
this.context = context;
}
@Override
public int getItemCount() {
//need add the count of title
return userList.size() + 1;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ItemUserLayoutBinding itemUserLayoutBinding;
ItemTitleBinding itemTitleBinding;
switch (viewType) {
case 0:
itemTitleBinding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_title, parent, false);
return new MyViewHolder(itemTitleBinding);
case 1:
itemUserLayoutBinding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_user_layout, parent, false);
return new MyViewHolder(itemUserLayoutBinding);
default:
// invalid case
return null;
}
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case 0:
ItemTitleBinding itemTitleBinding = holder.itemTitleBinding;
itemTitleBinding.setHandler(new EventHandler(context));
break;
case 1:
User user = userList.get(position - 1);
ItemUserLayoutBinding itemUserLayoutBinding = holder.itemUserLayoutBinding;
itemUserLayoutBinding.setHandler(new EventHandler(context));
itemUserLayoutBinding.setUseritem(user);
break;
default:
}
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
//if position is 0,it is type for title
return 0;
} else {
//if not,it is type for user
return 1;
}
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ItemUserLayoutBinding itemUserLayoutBinding = null;
ItemTitleBinding itemTitleBinding = null;
public MyViewHolder(ItemUserLayoutBinding itemUserLayoutBinding) {
super(itemUserLayoutBinding.getRoot());
this.itemUserLayoutBinding = itemUserLayoutBinding;
itemUserLayoutBinding.setHandler(new EventHandler(context));
}
public MyViewHolder(ItemTitleBinding itemTitleBinding) {
super(itemTitleBinding.getRoot());
this.itemTitleBinding = itemTitleBinding;
itemTitleBinding.setHandler(new EventHandler(context));
}
}
}
主界面
MainActivity
public class MainActivity extends AppCompatActivity {
private List<User> mUserList;
private UserAdapter mUserAdapter;
ActivityMainBinding mainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
initData();
}
private void initData() {
mUserList = new ArrayList<User>();
for (int i = 0; i < 20; i++) {
User u = new User("Caihuijian", i);
mUserList.add(u);
}
mUserAdapter = new UserAdapter(this, mUserList);
mainBinding.listAll.setLayoutManager(new LinearLayoutManager(this));
mainBinding.listAll.setAdapter(mUserAdapter);
}
}