採用Fragment.setArguments(Bundle bundle)來傳遞參數,而不用構造函數

google官方推薦用setArgument來傳參而不是用構造函數。

    因爲當切換橫豎屏時,Fragment會調用自己的無參構造函數,那麼在構造函數傳參就會失效。


public class FramentTestActivity extends ActionBarActivity {

  

  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);


    //切換橫豎屏後savedInstanceState就不爲null,所以只有第一次進來時纔會調用,如果不判斷的話,切換橫豎屏時又會在原fragment基礎上又new 一個Fragment,這樣就有2個fragment重疊了。

    if (savedInstanceState == null) {

      getSupportFragmentManager().beginTransaction()

          .add(R.id.container, new TestFragment("param")).commit();

    }

    

  }


  public static class TestFragment extends Fragment {


    private String mArg = "non-param";

    

    public TestFragment() {

      Log.i("INFO", "TestFragment non-parameter constructor");

    }

    

    public TestFragment(String arg){

      mArg = arg;

      Log.i("INFO", "TestFragment construct with parameter");

    }


    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

        Bundle savedInstanceState) {

      View rootView = inflater.inflate(R.layout.fragment_main, container,

          false);

      TextView tv = (TextView) rootView.findViewById(R.id.tv);

      tv.setText(mArg);

      return rootView;

    }

  }


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章