这不是数据绑定,这是视图绑定,这是Android Studio3.6Canary 11+的新特性here..。
对于在活动中的使用,很明显,您只需像这样使用它:
假设我们有一个名为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());
}
}但是,还不清楚如何在RecyclerView中使用视图绑定?
编辑:请用Java解释。
发布于 2020-02-20 13:58:20
假设我们在里面有一个RecyclerViewactivity_main.xml它的id是"@+id/rv_test"
在活动中,我们可以这样使用它:
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然后,我们可以在活动内部实现适配器,如下所示:
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 items = Arrays.asList("item", "item", "item");
binding.rvTest.setAdapter(new MyAdapter(items));
}
private class MyAdapter extends RecyclerView.Adapter{
private List 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 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();
}
}
}发布于 2020-02-20 14:06:41
class LanguageAdapter(val context: Context, var listData: MutableList, val listener: onCheckListner) : RecyclerView.Adapter() {
lateinit var bindind: LangugaeItemBinding
fun onRefresh(listData: MutableList) {
this.listData = listData
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
bindind = LangugaeItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(bindind)
}
override fun getItemCount(): Int {
return listData.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.setData(listData[position])
}
inner class ViewHolder(private val binding: LangugaeItemBinding) : RecyclerView.ViewHolder(binding.getRoot()), View.OnClickListener {
override fun onClick(v: View?) {
when (v) {
itemView -> {
}
}
}
init {
itemView.radio_button.setOnClickListener(this)
}
fun setData(model: ListData) {
with(binding) {
data = model
executePendingBindings()
}
}
}
}只需将模型或数组列表传递到适配器并在绑定视图中进行设置
发布于 2020-06-08 13:30:46
下面是使用视图绑定的完整适配器代码,您可以这样做。
package com.jbws.myviewbindingdemo.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.jbws.myviewbindingdemo.databinding.RowXmlViewBinding;
import com.jbws.myviewbindingdemo.pojo.ModelObject;
import java.util.ArrayList;
public class RecyclerViewListAdapter extends RecyclerView.Adapter {
public ArrayList modelObjectArrayList;
public RecyclerViewListAdapter(ArrayList modelObjectArrayList) {
this.modelObjectArrayList = modelObjectArrayList;
}
@NonNull
@Override
public RecyclerViewListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(RowXmlViewBinding.inflate(LayoutInflater.from(parent.getContext()),
parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewListAdapter.ViewHolder holder, final int position) {
ModelObject modelObject = modelObjectArrayList.get(position);
holder.rowXmlViewBinding.txtObjectName.setText(modelObject.getFullName());
holder.rowXmlViewBinding.btnUpdateName.setOnClickListener(view -> {
Log.i("LOG_TAG", "Full Name: " + modelObject.getFullName);
});
}
@Override
public int getItemCount() {
return modelObjectArrayList == null ? 0 :
modelObjectArrayList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private RowXmlViewBinding rowXmlViewBinding;
public ViewHolder(RowXmlViewBinding rowXmlViewBinding) {
super(rowXmlViewBinding.getRoot());
this.rowXmlViewBinding = rowXmlViewBinding;
}
}
}https://stackoverflow.com/questions/60313719
复制相似问题