フラグメントとカスタムビューは同様の機能を実現できます。フラグメントを使用すると、フラグメントがカスタムビューと比較して再利用しやすくなります。フラグメントはカスタムビューに取って代わるものですか、それとも特定の目的のための拡張機能ですか?
たとえば、次のコードはfragmentです。
public class TestFragment extends Fragment {
private TextView tv_name;
private Button btn_play;
private Button btn_delete;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.testfragment, container, false);
}
@Override
public void onStart() {
super.onStart();
tv_name = (TextView)getView().findViewById(R.id.tv_name);
btn_play = (Button)getView().findViewById(R.id.btn_play);
btn_delete = (Button)getView().findViewById(R.id.btn_delete);
}
}
カスタムビューのコード:
public class TestCustomView extends LinearLayout {
private TextView tv_name;
private Button btn_play;
private Button btn_delete;
public TestCustomView(Context context, AttributeSet attrs){
super(context, attrs);
setOrientation(LinearLayout.HORIZONTAL);
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
tv_name = new TextView(context);
addView(tv_name);
btn_play = new Button(context);
addView(btn_play);
btn_delete = new Button(context);
addView(btn_delete);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.testfragment, container, false);
}
}
TestFragment
とTestCustomView
の両方は、TextView
とButtons
で構成されるビューを作成し、Framelayout/fragment
とcom.packagename.TestCustomView
のタグを使用して、アクティビティのxmlレイアウトファイルで宣言しますが、フラグメントを使用する利点は何ですか?
フラグメントはさまざまなシナリオで使用できますが、最も使用されるのは次のとおりです。
フラグメントが首の完全な痛みである場合があります、そして、彼らがより速く結果を達成できる場合があります。
一部のカスタムでより柔軟な状況では、フラグメントが乱雑になる可能性があり、フラグメントを管理するのは困難です。そのため、ビューを直接処理することは、場合によっては非常に便利で便利です。しかし、すべては要件に基づいています。
注View
には独自のライフサイクルがあり、保存されたインスタンスの状態を保存/再作成できます。もう少し作業が必要ですが、オプションもあります。
カスタムビューにはシンプルさという利点があり、主な目的はデータを画面に表示することです。さらに多くのことを行うには、他のコンポーネントに依存する必要があります。
フラグメントは、1つ以上のビューを使用して、特定の目的を持つUIの一部を表示する機能ユニットとして機能します。フラグメントはアクティビティライフサイクルに接続され、ビューをデータで埋めるためにローダーを含めて制御できます。また、サブフラグメントを含めることもできます。最後に、合成バックスタックに追加することもできます。彼らは多くのことをすることができ、学ぶのはやや複雑です。
ご覧のように、フラグメントには、カスタムビューよりもアクティビティとの共通点が多くあります。
補足として、フラグメントはヘッドレス(UIなし)にすることもできます。ヘッドレスフラグメントは、アクティビティライフサイクルに依存する非ビジュアル機能を別のコンポーネントにカプセル化する方法を提供します。
フラグメントには独自のライフサイクルがあり、必要なものに応じて障害またはボーナスになる場合があります。
フラグメントは、onResumeやonSavedInstanceStateなどのライフサイクルメソッドを取得します。これは、アプリケーションの状態遷移の処理に役立ちます。カスタムビューを使用している場合は、そのようなことを自分で処理する必要があります。
フラグメントの使用に反対する人々がいます。読むことをお勧めします https://corner.squareup.com/2014/10/advocating-against-Android-fragments.html