22

onCreateViewメソッドを手動で呼び出すことは可能ですFragmentか、そうでない場合、この呼び出しをシミュレートする方法はありますか?

私はFragmentActivitytabHostを持っています。各タブには が含まれており、[更新] ボタンを押したときに のビューFragmentを更新したいと考えています。より具体的には、メソッドFragmentを再呼び出ししたい。onCreateView

私のコードは現在次のようになっています:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
    view= inflater.inflate(R.layout.fragment_hall, container, false);

    layoutExsternal = (RelativeLayout) view.findViewById(R.id.layoutExsternal);
    layoutHall = (RelativeLayout) view.findViewById(R.id.layoutHall);

    init();

    return view;
 }

  [...]

@Override
public boolean onOptionsItemSelected(MenuItem item) {
      // TODO Auto-generated method stub
     Log.d("itemSelected1", this.getClass().getSimpleName());

     switch (item.getItemId()) {
        case R.id.menu_refresh:

            //HERE I want to insert a method for refresh o redraw

     return true;
     }

return super.onOptionsItemSelected(item);

}
4

3 に答える 3

35

FragmentTransaction の置換がフラグメントをそれ自体で置換するのに機能しないことが時々ありました。私にとって機能するのは、デタッチとアタッチを使用することです。

getSupportFragmentManager()
    .beginTransaction()
    .detach(fragment)
    .attach(fragment)
    .commit();

remove と detach の違いについては、この質問を参照してください

于 2013-10-16T16:55:33.630 に答える
9

私は私の質問を解決しました。現在のフラグメントをそれ自体に置き換えますが、現在のフラグメントの参照を保存する前に、onDestroy() を呼び出して現在のフラグメントのライフ サイクルを閉じます。「newFragment」変数で思い出します。

         

switch (item.getItemId()) { case R.id.menu_refresh: //THIS IS THE CODE TO REFRESH THE FRAGMENT. FragmentManager manager = getActivity().getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); Fragment newFragment = this; this.onDestroy(); ft.remove(this); ft.replace(container.getId(),newFragment); //container is the ViewGroup of current fragment ft.addToBackStack(null); ft.commit(); return true; }

于 2013-06-26T07:36:15.223 に答える
3

置換ボタンで現在のレイアウトをフラグメントの新しいインスタンスに置き換えることができます。

// onButtonClick
SomeFragment fragment = new SomeFragment();
getFragmentManager().beginTransaction().replace(R.id.current_layout, fragment).commit();
于 2013-06-24T20:56:26.090 に答える