这不是数据绑定(bind),这是 Android Studio 3.6 Canary 11+ 中新增的 View 绑定(bind),已描述 here .
对于在 Activity 中使用,很明显,您只需像这样使用它:
假设我们有一个名为 activity_main.xml
的布局
然后在代码中我们可以这样使用它:
public class MainActivity extends Activity{
ActivityMainBinding binding; //Name of the layout in camel case + "Binding"
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
}
}
但是,不清楚如何将 View Binding 与 RecyclerView 一起使用?
编辑:请用Java解释。
最佳答案
假设我们在 activity_main.xml
内部有一个 RecyclerView它的 id 是 "@+id/rv_test"
在 Activity 内部,我们可以像这样使用它:
public class MainActivity extends Activity{
ActivityMainBinding binding; //Name of the layout in camel case + "Binding"
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
binding.rvTest.setLayoutManager(layoutManager);
}
}
我们将 RecyclerView 项目的布局命名为
test_list_item.xml
然后我们可以像这样在 Activity 中实现我们的适配器:
public class MainActivity extends Activity{
ActivityMainBinding binding; //Name of the layout in camel case + "Binding"
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
binding.rvTest.setLayoutManager(layoutManager);
List<String> items = Arrays.asList("item", "item", "item");
binding.rvTest.setAdapter(new MyAdapter(items));
}
private class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
private List<String> items;
private class MyViewHolder extends RecyclerView.ViewHolder{
TestListItemBinding binding;//Name of the test_list_item.xml in camel case + "Binding"
public MyViewHolder(TestListItemBinding b){
super(b.getRoot());
binding = b;
}
}
public MyAdapter(List<String> items){
this.items = items;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
return new MyViewHolder(TestListItemBinding.inflate(getLayoutInflater()));
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
String text = String.format(Locale.ENGLISH, "%s %d", items.get(position), position);
//An example of how to use the bindings
holder.binding.tvTest.setText(text);
}
@Override
public int getItemCount(){
return items.size();
}
}
}
关于java - 如何将 Android View 绑定(bind)与 RecyclerView 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60313719/