Fragment Android(八)

本文导读:本文仅仅是学习中的遇到问题的解决方法。相关学习内容可以点击开头的链接进入,或者跳转到本文最后,有相关转载的内容。

Fragment的教学链接,点击进入该连接!!!

静态Fragment遇到的异常问题

error inflating class fragment

1.在新建的java文件中实现Fragment1类

public class Fragment1 extends Fragment{

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        /*记得在这里指定布局,记得不要写错了*/
        return inflater.inflate(R.layout.fragement1, container, false);
    }
}

2.Fragment1的布局简单如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="#00ff00" >  

    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="This is fragment 1"  
        android:textColor="#000000"  
        android:textSize="25sp" /> 

</LinearLayout>

3.main的布局文件中,要在name中引用”com.example.ihome_client.Fragment2”

<fragment 
          android:id="@+id/fragement2"
          android:name="com.example.ihome_client.Fragment2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          />

4.在main.java中要记得Activity继承 FragmentActivity
5.要引用相应的包 import android.support.v4.app.FragmentActivity;

动态Fragment

1.删除掉main.xml中与fragment相关的布局。因为是动态添加
2.main.java中为如下内容

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*得到屏幕的display*/
        Display display = getWindowManager().getDefaultDisplay();
        if (display.getWidth() > display.getHeight()) {//如果宽度大于高度,则是横屏
            Fragment1 fragment1 = new Fragment1();
            getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit();
        } else {//否则是竖屏
            Fragment2 fragment2 = new Fragment2();
            getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment2).commit();
        }
    }

}
  • 注意:replace(R.id.main_layout, fragment1)中的R.id.main_layout是main的xml中布局的ID,切记不要写错了!

3.动态添加步骤如下

getFragmentManager()                //1.获取到FragmentManager
beginTransaction()                  //2.开启一个事务
replace(R.id.main_layout, fragment2)//3.向容器中加入fragement
commit()                            //4.提交事务

Fragment的生命周期

public class Fragment1 extends Fragment {
    public static final String TAG = "Fragment1";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.d(TAG, "onCreateView");
        return inflater.inflate(R.layout.fragment1, container, false);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "onAttach");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, "onActivityCreated");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d(TAG, "onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d(TAG, "onDetach");
    }

}

运行程序时:
运行程序
* onAttach方法:Fragment和Activity建立关联的时候调用。
* onCreateView方法:为Fragment加载布局时调用。
* onActivityCreated方法:当Activity中的onCreate方法执行完后调用。
* onDestroyView方法:Fragment中的布局被移除时调用。
* onDetach方法:Fragment和Activity解除关联的时候调用。

详细内容参考文章开头的链接

Fragment的通信

1.同时显示2个gragment 不然在一个fragment中找不到另一个fragment中的Textview

Fragment1 fragment1 = new Fragment1();
getFragmentManager().beginTransaction().replace(R.id.linear1, fragment1).commit();

Fragment2 fragment2 = new Fragment2();
getFragmentManager().beginTransaction().replace(R.id.linear2, fragment2).commit();

2.实现一个fragment中onActivityCreated

public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        button = (Button) (getActivity().findViewById(R.id.button)); 

        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub

                TextView textView = (TextView) getActivity().findViewById(R.id.f1text);
                Toast.makeText(getActivity(), textView.getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }

重点:在Fragment中使用getActivity()—得到关联的activity(),再通过findViewById找到关联该activity的其他控件,通过这种方法能实现Fragment之间的通信

推荐一个博客: 深入分析:Fragment与Activity交互的几种方式http://blog.youkuaiyun.com/huangyabin001/article/details/35231753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值