Eine der Komponenten von * Android Jetpack *, [* Data Binding Library *](https: // Entwickler. Ein Memorandum, das android.com/topic/libraries/data-binding/?hl=JA verwendet, um die Erfassung von View durch findViewById
aus dem Quellcode zu löschen.
build.gradle
app/build.gradle
android {
//Unterlassung
dataBinding {
enabled = true
}
}
Fügen Sie das Obige hinzu
layout / *. Xml
in <layout> </ layout>
einlayout/*.xml
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<!--Layouteinstellungen-->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HogeActivity">
<!--Unterlassung-->
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Fügen Sie "
Die Methode unterscheidet sich geringfügig je nach anzugebendem Ziel.
Activity.java
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity);
+ final ActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.activity);
- final TextView textView = findViewById(R.is.text_view);
- textView.setText("HogeFuga");
+ binding.textView.setText("HogeFuga");
Beachten Sie den Rückgabetyp "DataBindingUtil.setContentView". (Da es sich um einen generischen Typ handelt, wird jede Klasse akzeptiert, die "ViewDataBinding" erbt.)
Fragment.java
+private FragmentBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment, container, false);
+ binding = FragmentBinding.inflate(inflater, container, false);
+ return binding.getRoot();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- final TextView textView = findViewById(R.is.text_view);
- textView.setText("HogeFuga");
+ binding.textView.setText("HogeFuga");
}
Ein Muster, das eine Ansicht aus der Bindungsklasse erstellt. Ist es nicht gut, eine Bindungsklasse im Feld zu haben?
Fragment.java
+private FragmentBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- final TextView textView = findViewById(R.is.text_view);
- textView.setText("HogeFuga");
+ final FragmentBinding binding = FragmentBinding.bind(getView());
+ binding.textView.setText("HogeFuga");
}
Ein Muster, das zuerst eine Ansicht und dann eine darauf basierende Bindungsinstanz erstellt. In diesem Fall ist es nicht erforderlich, es vor Ort zu haben.
diff:RecyclerView.Adapter.java
@NonNull
@Override
public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- final View view = inflater.inflate(R.layout.recycler_row, parent, false);
- return new ViewHolder(view);
+ final RecyclerViewAdapterBinding binding = RecyclerViewAdapterBinding.inflate(inflater, parent, false);
+ return new ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.bind("HogeFuga");
}
class ViewHolder extends RecyclerView.ViewHolder {
@NonNull
- private final TextView textView;
+ private final RecyclerRowBinding binding;
- private MainViewHolder(@NonNull View view) {
- super(view);
- textView = view.findViewById(R.id.text_view);
+ private MainViewHolder(@NonNull RecyclerRowBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
}
void bind(@NonNull String text) {
- textView.setText(text);
+ binding.textView.setText(text);
}
}
Wenn Sie es für * RecyclerView.Adapter * verwenden, sollten Sie * groupie * oder * epoxy * verwenden, um die Notwendigkeit von * RecyclerView.ViewHolder * zu beseitigen.
--Welche Muster 1 und 2 eignen sich besser für Fragmente?
Recommended Posts