我想要做的是實例化一個新的片段使用參數來設置在我的MainActivity類onCreateView
內使用的值。Android片段實例化器不會運行之前onCreateView
片段類
//package
//imports
public class LansFragment extends Fragment {
private static final String ARG_TEXT = "arg_text";
public LansFragment() {
super();
}
public static LansFragment newInstance(String lan) {
LansFragment fragment = new LansFragment();
Bundle args = new Bundle();
args.putString(ARG_TEXT, lan);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_lans, container, false);
Bundle args = getArguments();
if (args != null) {
String lan = args.getString(ARG_TEXT);
//do things using params
} else {
//blank params
//should have been set when instantiated from MainActivity?
}
return view;
}
}
MainActivity類別
//package
//imports
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
String data = "Some string";
LansFragment testfragment = LansFragment.newInstance(data);
}
問題
有此刻的兩個問題。第一個問題是,如果我刪除: LansFragment testfragment = LansFragment.newInstance(data);
然後這個片段仍然運行,這是由於在activity_main.xml
內聲明片段?
其次,更重要的問題 - 當我實例類,並在傳遞參數,像我這樣的例子,他們從來沒有可用的內部onViewCreate
,而是始終顯示爲null
,是什麼原因造成這種情況?
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="app.stats.MainActivity"
android:orientation="horizontal">
<fragment xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/lans_fragment"
android:name="app.stats.LansFragment"
tools:layout="@layout/fragment_lans"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
我是否必須使用'FrameLayout',因爲它更好,每個片段具有不同的xml文件以將代碼分離出來? – Dan
'FrameLayout'只能作爲你的'fragment'的容器並進入你的'activity'佈局。 '片段'本身可以有你想要的任何父母佈局。 –