• Android使用Fragment,不能得到Fragment内部控件,findViewById()结果是Null--已经解决


    程序很easy。好长时间没有搞定。郁闷。。。。

    。。。。

    在论坛咨询,最终找到答案。

    描写叙述:

    一个Activity:MainActivity。内部是一个Fragment:FragmentA。FragmentA里面有TextView。

    问题:不管怎样也得不到FragmentA内部的TextView,返回值永远是Null

    详细描写叙述:

    MainActivity的layout:activity_main.xml

    <?xml version="1.0" encoding="utf-8"?

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

    FragmentA的layout:fragment_a.xml

    <?

    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="初始化文本" />


    MainActivity.java

    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    	}

    FragmentA.java

    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("改变");
    	}

    详细问题:

    在FragmentA.onActivityCreated()中。
    TextView textView1 = (TextView) getView().findViewById(R.id.textView1); 得到的始终是Null。



    在Fragment.onCreateView()中,

    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {   第二个參数 container一直是个空值


    在MainActivity中,findViewById(R.id.textView1),   相同是空值。


    问题在哪里呢??????????


    ===============================================================================================================

    原因


    让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。结果就死活不成功。

    想不到是这个原因。

  • 相关阅读:
    利用python 传输文件
    SVN 操作报错 “Previous operation has not finished; run 'cleanup' if it was interrupted“
    Java IP白名单相关工具类
    Truncated class file 问题的解决
    Linux 文件压缩与解压相关
    MyEclipse 根据左括号或右括号查找另外一半
    100个常用的linux命令(转)
    Java 编码规范(转)
    MyEclipse 远程调试Tomcat
    Extjs header column 自定义排序规则
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6978070.html
Copyright © 2020-2023  润新知