View Binding是一种功能,允许开发者更容易的编写与视图交互的代码。
一旦在一个模块中启用了View Binding,它就会为该模块中存在的每个XML布局文件生成一个绑定类
如何启用View Binding
在build.gradle的android{}中添加代码
buildFeatures{ viewBinding true }
|
如何使用View Binding
在Activity中使用View Binding
private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) }
|
ActivityMainBinding mainBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mainBinding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(mainBinding.getRoot()); }
|
然后就可以使用binding对象来访问视图
binding.textview.text = "hello world"
|
mainBinding.textview.setText("hello world");
|
在Fragment中使用View Binding
private lateinit var binding: FragmentBlankBinding
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = FragmentBlankBinding.inflate(layoutInflater) return binding.root }
|
private FragmentMainBinding fmBinding; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fmBinding = FragmentMainBinding.inflate(inflater,container,false); return fmBinding.getRoot(); } @Override public void onDestroyView() { super.onDestroyView(); fmBinding = null; }
|
然后就可以像在Activity中一样去使用它了
在RecycleViewAdapter中使用View Binding
class ViewHolder(var viewBinding: MainlistItemBinding):RecyclerView.ViewHolder(viewBinding.root) { }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = MainlistItemBinding.inflate(LayoutInflater. from(parent.context),parent,false) return ViewHolder(binding) }
override fun onBindViewHolder(holder: ViewHolder, position: Int) { val mainlistItemBinding = holder as MainlistItemBinding val fruit = fruitList[position] mainlistItemBinding.fruitname.text = fruit.name }
|
public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> { @NonNull @NotNull @Override public MainViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) { return new MainViewHolder(MainrecyItemBinding. inflate(LayoutInflater.from(parent.getContext()) ,parent,false)); }
@Override public void onBindViewHolder(@NonNull @NotNull MainViewHolder holder, int position) { }
@Override public int getItemCount() { return 0; }
public class MainViewHolder extends RecyclerView.ViewHolder { MainrecyItemBinding mrBinding; public MainViewHolder(MainrecyItemBinding itemBinding) { super(itemBinding.getRoot()); this.mrBinding = itemBinding; } } }
|
在使用<include>时使用viewBinding
include标签下必须添加id
<include android:id="@+id/titlebar" layout="@layout/titlebar" />
|
java代码中表示为:
ActivityMainBinding.titlebar.xxxbtn
|
来获取<include>中的控件