本文主要是介绍ViewBinding使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ViewBinding使用
ViewBinding是一个新的库,可以替代findViewById()来绑定视图。它是一种类型安全的、可空的方式来访问视图层次结构中的视图。与ButterKnife等其他绑定库相比,ViewBinding是由Google官方提供的,并且使用起来更加简单。
使用ViewBinding步骤如下:
- 在build.gradle文件中添加以下依赖项:
android {...buildFeatures {viewBinding true}
}dependencies {...implementation 'com.android.support:viewbinding:28.0.0-alpha1'
}
- 在布局文件中添加标签,例如:
<layout xmlns:android="http://schemas.android.com/apk/res/android"><LinearLayoutandroid:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!" /></LinearLayout>
</layout>
- 在代码中使用ViewBinding绑定视图,例如:
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)binding.container.setOnClickListener {binding.textView.text = "You clicked me!"}}
}
在这个例子中,我们使用ActivityMainBinding来绑定activity_main.xml中的视图。通过inflate()方法创建绑定对象,然后使用setContentView()方法设置根视图。此后,我们可以像访问一个正常的布局一样访问视图。
使用ViewBinding的主要好处是避免了许多模板代码,并且可以避免在运行时发生NullPointerException,因为它使用了Kotlin的可空类型。
在Activity中ViewBinding使用
在Activity中使用ViewBinding,需要在build.gradle文件中添加以下依赖项:
android {...buildFeatures {viewBinding true}...
}dependencies {...implementation 'com.android.support:viewbinding:28.0.0'
}
接下来,在Activity的布局文件中添加以下代码:
<LinearLayout...><TextViewandroid:id="@+id/textView".../><Buttonandroid:id="@+id/button".../></LinearLayout>
在Activity中使用ViewBinding时,首先需要在Activity中声明一个ViewBinding的对象,在onCreate()方法中进行初始化:
private ActivityMainBinding binding;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());
}
接下来就可以使用binding对象来操作布局中的控件了:
binding.textView.setText("Hello World!");
binding.button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// do something}
});
需要注意的是,ViewBinding会根据布局文件中控件的id为这些控件生成对应的变量名,因此在使用时需要使用camelCase的命名方式,比如findViewById(R.id.text_view)
对应的ViewBinding变量名为binding.textView
。
另外,需要注意的是,如果Activity中存在多个布局文件,需要使用对应的ViewBinding对象来操作不同的布局文件中的控件,例如:
private ActivityMainBinding mainBinding;
private ActivityOtherBinding otherBinding;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mainBinding = ActivityMainBinding.inflate(getLayoutInflater());otherBinding = ActivityOtherBinding.inflate(getLayoutInflater());setContentView(mainBinding.getRoot()); // 设置默认布局
}private void switchLayout(boolean isMain) {if (isMain) {setContentView(mainBinding.getRoot());} else {setContentView(otherBinding.getRoot());}
}
在Fragment中ViewBinding使用
在Fragment中使用ViewBinding,需要在Fragment的onCreateView方法中进行以下步骤:
- 在Fragment的类中定义一个ViewBinding对象,如:
private var binding: FragmentExampleBinding? = null
- 在onCreateView方法中获取ViewBinding对象:
binding = FragmentExampleBinding.inflate(inflater, container, false)
- 返回ViewBinding的根视图:
return binding?.root
- 确保在Fragment销毁时解除绑定:
override fun onDestroyView() {super.onDestroyView()binding = null
}
完整示例代码:
class ExampleFragment : Fragment() {private var binding: FragmentExampleBinding? = nulloverride fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {binding = FragmentExampleBinding.inflate(inflater, container, false)return binding?.root}override fun onDestroyView() {super.onDestroyView()binding = null}
}
这篇关于ViewBinding使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!