Android开发中Fragment(片段)的基本用法(总结)

Fragment是一个Activity片段,必须嵌套在Activity中,有自己的生命周期,但又依赖于父Activity的生命周期。

创建一个Fragment

1)静态加载Fragment

实现流程:


2)动态加载Fragment

实现流程:

Fragment与Activity的交互

可能有的朋友不喜欢看图,接下来用文字介绍下吧:

1)组件获取

Fragment获得Activity中的组件: getActivity().findViewById(R.id.list);
Activity获得Fragment中的组件(根据id和tag都可以):getFragmentManager.findFragmentByid(R.id.fragment1);


2)数据传递

①Activit传递数据给Fragment:

在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle)从而将Bundle数据包传给Fragment,然后Fragment中调用getArguments获得Bundle对象,然后进行解析就可以了

②Fragment传递数据给Activity

在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口,Fragment就可以通过回调接口传数据了,回调,相信很多人都知道是什么玩意,但是写不出来啊,网上的一百度"fragment传数据给Activity",全是李刚老师的那个代码,真心无语算了,这里就写下局部代码吧,相信读者一看就懂的了:

Step 1:定义一个回调接口:(Fragment中)

/*接口*/  
public interface CallBack{  
    /*定义一个获取信息的方法*/  
    public void getResult(String result);  
}  

Step 2:接口回调(Fragment中)

/*接口回调*/  
public void getData(CallBack callBack){  
    /*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/  
    String msg = editText.getText().toString();  
    callBack.getResult(msg);  
}  

Step 3:使用接口回调方法读数据(Activity中)

/* 使用接口回调的方法获取数据 */  
leftFragment.getData(new CallBack() {  
 @Override  
       public void getResult(String result) {              /*打印信息*/  
            Toast.makeText(MainActivity.this, "-->>" + result, 1).show();  
            }
        }); 

总结下方法:->在Fragment定义一个接口,接口中定义抽象方法,你要传什么类型的数据参数就设置为什么类型;
->接着还有写一个调用接口中的抽象方法,把要传递的数据传过去
->再接着就是Activity了,调用Fragment提供的那个方法,然后重写抽象方法的时候进行数据的读取就可以了!!!

实例如下:

MainActivity.java的代码如下:

package com.deepreality.fragmentdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button btnShowFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载静态Fragment
        //setContentView(R.layout.activity_main);

        //加载动态Fragment布局
        setContentView(R.layout.activity_main_dynamicfragment);

        //以下是动态加载Fragment的代码
        btnShowFragment = findViewById(R.id.main_btnShowFragment);
        getFragmentManager().beginTransaction().add(R.id.main_lLayout, new DynamicFragmentOne()).commit();
        btnShowFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getFragmentManager().beginTransaction().replace(R.id.main_lLayout, new DynamicFragmentTwo()).commit();
            }
        });

    }
}

DynamicFragmentOne.java的代码如下:

package com.deepreality.fragmentdemo;

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class DynamicFragmentOne extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_dynamicfragment_one, container, false);
        return view;
    }
}
其他相关的代码和布局,自行补充。

猜你喜欢

转载自blog.csdn.net/lpcrazyboy/article/details/80881665
今日推荐