程序很easy。好長時間沒有搞定。鬱悶。。。。java
。android
。。。。app
。ide
。post
。spa
在論壇諮詢,最終找到答案。code
描寫敘述:xml
一個Activity:MainActivity。內部是一個Fragment:FragmentA。FragmentA裏面有TextView。blog
問題:無論怎樣也得不到FragmentA內部的TextView,返回值永遠是Null繼承
詳細描寫敘述:
MainActivity的layout:activity_main.xml
<?xml version="1.0" encoding="utf-8"?FragmentA的layout:fragment_a.xml> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.fragmentexercise.FragmentA" android:id="@+id/fragment_a" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" android:textSize="18sp" android:text="初始化文本" />
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
public class FragmentA extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_a, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // TextView textView1 = (TextView) getView().findViewById(R.id.textView1); // textView1.setText("改變"); }
在Fragment.onCreateView()中,
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 第二個參數 container一直是個空值
問題在哪裏呢??????????
===============================================================================================================
緣由
讓Activity 繼承 android.support.v4.app.FragmentActivity, 讓Fragment繼承android.support.v4.app.Fragment就可以了
這樣。在FragmentA的onStart等方法中,getActivity().findViewById(R.id.textView1) 就能獲得這個TextView。
直接繼承 android.app.Fragment,就不行。或許是Android的bug吧。
事實上我是依照developer.android.com上的trainning的樣例作的。那個樣例是爲了兼容android3.0曾經的系統,繼承了android.support.v4.app.Fragment。官方樣例執行正常。
個人手機是Android4.1的,可以支持Fragment。因此我直接繼承了adnroid.app.Fragment。結果就死活不成功。
想不到是這個緣由。