0

findFragmentById を使用してフラグメントを取得しようとしていますが、代わりに null を取得するたびに、findFragmentByTag を使用して追加トランザクションにタグを追加しようとしましたが、それも同じです。

次のコードは、空白の開始テンプレートを変更したものです (簡単にするため)。

public class MainActivity extends Activity {

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

    FragmentManager fragmentManager = getFragmentManager();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);

    if (placeholderFragment == null) {
        Log.i("TAG", "placeholderFragment is null");
    } else {
        Log.i("TAG", "placeholderFragment is not null");
    }
}

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }
}

}

add を に置き換えてみましたが、add(R.id.container, new PlaceholderFragment(), "TAG")アクセスしようとしてfindFragmentByTag("TAG")も成功しませんでした。

コードを意図したとおりに動作させるにはどうすればよいですか?

4

1 に答える 1

3

問題は、を追加した直後に見つけようとしていることにあると思いますFragment。そのわずかな時間で、Fragmentはおそらくまだ追加されていません。

できることは、フラグメントを追加している間にすでにフラグメントを持っているということです。

findFragmentById()Fragmentsfunction は通常、しばらくの間追加した後で他の関数にアクセスするためのものです。

ここに例があります

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

    FragmentManager fragmentManager = getFragmentManager();
    PlaceholderFragment placeholderFragment = new PlaceholderFragment();

    if (savedInstanceState == null) {
        fragmentManager.beginTransaction()
                .add(R.id.container, placeholderFragment).commit();
    }
}

public void anotherFunc() {

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager
            .findFragmentById(R.id.container);
}
于 2014-07-22T02:16:47.203 に答える