在使用视图绑定时,我遇到了一些未记录的情况。
第一:我如何获得绑定包含视图布局部分?主绑定只能看到在主布局中定义的项。
第二:如何获得合并布局部分的绑定。同样,主绑定只看到主布局中的项目?
在使用视图绑定时,我遇到了一些未记录的情况。
第一:我如何获得绑定包含视图布局部分?主绑定只能看到在主布局中定义的项。
第二:如何获得合并布局部分的绑定。同样,主绑定只看到主布局中的项目?
当前回答
在我的例子中,我忘记将id分配给include标记
现在,当你赋值了id,你就能得到绑定对象,
YourMainLayoutBinding.YourIncludeTagIDLayoutBinding
其他回答
关于您的第一个问题,您可以获得包含布局的视图绑定。
下面是一个main_fragment.xml文件示例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_main"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
</LinearLayout>
MainFragment.java可以是这样的:
public class MainFragment extends Fragment {
private MainFragmentBinding binding;
private ToolbarBinding toolbarBinding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = MainFragmentBinding.inflate(inflater, container, false);
toolbarBinding = binding.toolbar;
return binding.getRoot();
}
@Override
public void onDestroy() {
super.onDestroy();
toolbarBinding = null;
binding = null;
}
}
现在您有了两个绑定:一个对应于主布局,另一个对应于包含的布局。
遵循步骤:
private val binding: FragmentBinding 由viewBinding (FragmentBinding:绑定) 确保在“onViewCreated(view: view, savedInstanceState: Bundle?)”中执行以下操作 Val binding2 = binding.root.include_layout_id
例如val binding2 = binding.root.tool_bar_layout
现在访问你的include布局,视图。如。
binding2.textView.text = "your text"
假设我在activity_main.xml文件中包含了如下布局:
<include
android:id="@+id/ll_layout1"
layout="@layout/layout1"
android:visibility="gone" />
假设我想改变它的可见性。我可以这样做:
activityMainBinding.llLayout1.root.visibility = View.VISIBLE
如果你想绑定包含布局,
活动
YourMainLayoutBinding mainLayoutBinding = MainLayoutBinding.inflate(getLayoutInflater);
View view = mainLayoutBinding.getRoot();
YourIncludedLayoutBinding includedLayoutBinding = YourIncludedLayoutBinding.bind(View);
的片段
YourMainLayoutBinding mainLayoutBinding = MainLayoutBinding.inflate(inflater,container,false);
View view = mainLayoutBinding.getRoot();
YourIncludedLayoutBinding includedLayoutBinding = YourIncludedLayoutBinding.bind(View);
确保你的主布局绑定父根是LinearLayout, incledlayoutbinding父布局也是线性布局
使用数据绑定库。然后用<layout>标签包装XML布局
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
...
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
...
</LinearLayout>
</layout>
toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/ivImage"
... />
<TextView
android:id="@+id/tvTitle"
... />
</LinearLayout>
MainActivity.kt
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// Access include layout views
binding.toolbar.rootView.ivImage.setImageResource(R.drawable.ic_back_arrow)
binding.toolbar.rootView.tvTitle.text = getString(R.string.home)
...
}