gpt4 book ai didi

java - 如何将 Android View 绑定(bind)与 RecyclerView 结合使用

转载 作者:行者123 更新时间:2023-12-01 10:10:34 24 4
gpt4 key购买 nike

这不是数据绑定(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com