1

フラグメントを作成し、Java コードを使用してレイアウトに追加しています。これを行うために、2 つのクラスと 2 つのレイアウトを作成しました。クラスの 1 つは Fragment を拡張し、他のクラスは FragmentActivity を拡張します。xml ファイルの 1 つはコンテナで、もう 1 つはフラグメントです。これが私のコードです:

public class FragmentClass extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_layout, container,false);       
    return v;
}
}

そして、これがフラグメントをレイアウトに追加する方法です:

public class Fragment_Activity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.container_layout);

    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.container_layout_eklenecek_yer);

    if(fragment==null){
        fragment=new FragmentClass();
        fm.beginTransaction().add(R.id.container_layout_eklenecek_yer, fragment).commit();
    }
}
}

このコードは期待どおりに機能しますが、ここに私の質問があります: Fragment_Activity クラスに次のようなコードがあります。

fragment=new FragmentClass();

FragmentClass にはコンストラクターがありません。デフォルトですか、空のコンストラクターがここで呼び出されますか、それとも onCreateView がコンストラクターとして機能しますか? 私はここで混乱しています。

ありがとう

4

1 に答える 1

7

いいえ。

フラグメントを持つデフォルトのコンストラクターが必要です。引数を取らないコンストラクターは「デフォルトのコンストラクター」です (これは C++ の用語かもしれません)。

Android には RAM などのフラグメントが必要になる可能性があるため、断片が元に戻る可能性もあります。

コンストラクターに何か渡すと、フラグメントを再作成する必要があるときに、Android OS はそれをどのように認識して渡すのでしょうか? そうではありません - この質問には答えがありません。

したがって、デフォルトのコンストラクター。

フラグメントを再作成すると、Android はアクティビティをアタッチし、onActivityAttached (またはその調整に合わせてフラグメントのライフサイクルを検索) を使用してアクティビティを取得できます。アクティビティが a を実装/拡張するwhateverことがわかっている場合は、そのアクティビティを a にキャストしてwhatever保存することができます。

onCreateview メソッドはその名の通り、ビューを返すために呼び出されるものです。Androidがフラグメントを表すビューを必要とするときに呼び出されます。これはコンストラクターではなく、考えられないか、実際にはそうではありません。

于 2013-10-28T22:57:56.270 に答える