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;
}
}
}