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

标签 java android xml view binding

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

相关文章:

java - cassandra pelops 在服务器上的性能比本地差

android - Android同一个Activity中如何添加进度条(圆形)和水平进度条

android - 在 firestore 更新上启动一个函数

javascript - 将两个变量从 xml 附加到 html

java - 为什么 Java 中的大多数字符串操作都基于正则表达式?

java - 在 Java 中生成多个形状......?

java - 使用 selenium webdriver 运行测试

java - Android 蓝牙聊天应用程序(设备立即失去连接)

java - 引用的文件包含错误 (http ://java. sun.com/xml/ns/javaee/web-app.xsd)

ruby - 使用 rdf gem 在 ruby​​ 中解析 RDF (RDFXML) - 没有按预期工作