ViewBinding으로 작업하는 동안 문서화되지 않은 사례가 거의 없습니다.
첫째 : 포함 된 일반 뷰 레이아웃 부분에 바인딩하는 방법, 기본 바인딩은 기본 레이아웃의 항목 만 볼 수 있습니까?
둘째 : 포함 된 병합 유형 레이아웃 부분에 대한 바인딩을 얻는 방법, 다시 기본 바인딩은 기본 레이아웃의 항목 만 보입니까?
ViewBinding으로 작업하는 동안 문서화되지 않은 사례가 거의 없습니다.
첫째 : 포함 된 일반 뷰 레이아웃 부분에 바인딩하는 방법, 기본 바인딩은 기본 레이아웃의 항목 만 볼 수 있습니까?
둘째 : 포함 된 병합 유형 레이아웃 부분에 대한 바인딩을 얻는 방법, 다시 기본 바인딩은 기본 레이아웃의 항목 만 보입니까?
답변:
다음의 경우 :
<include
android:id="@+id/your_id"
layout="@layout/some_layout" />
활동 코드에서 이런 식으로 :
private lateinit var exampleBinding: ActivityExampleBinding //activity_example.xml layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
setContentView(exampleBinding.root)
//we will be able to access included layouts view like this
val includedView: View = exampleBinding.yourId.idOfIncludedView
//[...]
}
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="@layout/activity_example">
<TextView
android:id="@+id/some_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World" />
</merge>
이러한 병합 레이아웃을 올바르게 바인딩하려면 다음을 수행해야합니다.
활동 코드에서 :
private lateinit var exampleBinding: ActivityExampleBinding //activity_example.xml layout
private lateinit var mergeBinding: MergeLayoutBinding //merge_layout.xml layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
//we need to bind the root layout with our binder for external layout
mergeBinding = MergeLayoutBinding.bind(exampleBinding.root)
setContentView(exampleBinding.root)
//we will be able to access included in merge layout views like this
val mergedView: View = mergeBinding.someView
//[...]
}
ViewBinding을 사용하여 포함 된 레이아웃으로 작업하는 첫 번째 질문은 쉽게 해결할 수 있습니다.
다음은 샘플 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 MeaningFragment 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;
}
}
이제 두 개의 바인딩이 있습니다. 그중 하나는 기본값이고 다음은 포함 된 레이아웃입니다.
onCreate()
.의 구문이 비슷한 비 Fragment Activity에서 모두 작동합니다 . 감사. (를 사용하는 데 약간의 문제가 있음 DrawerLayout
)