Fragment完全总结

一.动态添加fragment

第一步,动态创建管理器对象

第二步,获取fragment的事务对象并开启

第三步,调用事务中相应的动态操作fragment方法的执行

第四步,提交事务

Fragment完全总结_第1张图片

二.静态添加fragment

1、继承Fragment,重写onCreateView决定Fragemnt的布局

2、在Activity中声明此Fragment,就当和普通的View一样

三.fragment向fragment传值

同一个activity中不同Fragment之间传值:

1.调用getFragmentManager().findFragmentById()获取fragment对象调用方法

2.getFragmentManager().findFragmentById().getView().findViewById()根据ID获取视图中的控件对象

3.getActivty().findviewById()获取当前所属activity根据Id获取view对象

下面的案例演示了静态向同一个Activity中植入两个(一左一右)fragment,左边fragment向右边fragment发送信息:

Fragment完全总结_第2张图片

//fragmentleft.java
package com.example.fragmenttofragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class fragmentLeft extends Fragment {
    private EditText et;
    private Button btn;
    @Nullable
    @Override

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
      View view=inflater.inflate(R.layout.fragment_left,null);
      et=view.findViewById(R.id.et);
      btn=view.findViewById(R.id.button);
      btn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              String str=et.getText().toString().trim();
              //方式一
            //  fragmentRight fragmentRight=
                     // (com.example.fragmenttofragment.fragmentRight) getFragmentManager().findFragmentById(R.id.rightFragment);
            // fragmentRight.setTextView(str);

              //方式二
            //  TextView tv=getFragmentManager().findFragmentById(R.id.rightFragment).
                   //  getView().findViewById(R.id.tv);
            //  tv.setText(str);

              //方式三
              TextView tv=getActivity().findViewById(R.id.tv);
              tv.setText(str);
          }
      });
      return view;
    }
}
//fragmentRight.java中
 public void setTextView(String str){
      tv.setText(str);
    }
//main.xml中


    
    

 

 

 

四.fragment传值给activity

fragment向所在activity传值步骤:1.fragment中定义传值的回调接口,在生命周期的onAttach()或者onCreate()方法中获取接口的实现

2.fragment需要传值的位置调用接口方法回调方法传值

3.activity实现接口重调方法获取传递的值

下面是一个简单的小案例:

//fragment.java
package com.example.fragtoac;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class fragment extends Fragment {
    private EditText et;
    private Button btn;
    private MyListener listener;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listener= (MyListener) getActivity();
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment,null);
        et = view.findViewById(R.id.et);
        btn=view.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String s=et.getText().toString().trim();
                listener.sendMessage(s);
            }
        });
        return view;
    }
public interface MyListener{
      public abstract void sendMessage(String str);
    }
}
package com.example.fragtoac;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements fragment.MyListener {
   private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=findViewById(R.id.tv);
    }

    @Override
    public void sendMessage(String str) {
        if(str!=null&&!"".equals(str)){
            tv.setText(str);
        }
    }
}



    

 

 

五.activity传值给fragment

第一步,activity中创建fragment对象,调用setArguments(bundle)方法存储值

第二步,fragment中调用getArguments()获取传递的bundle对象,解析获取具体值

 FragmentManager manager = getFragmentManager();
        transation = manager.beginTransaction();
        transation.add(R.id.fl,new resultfragment());
        transation.commit();
    }
    public void sendvalue(View view){
      String info=et.getText().toString().trim();
      resultfragment rf=new resultfragment();
      Bundle bundle=new Bundle();
      bundle.putString("info",info);
      rf.setArguments(bundle);
    }

 Fragment完全总结_第3张图片

六.fragment的生命周期

Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。

Fragment完全总结_第4张图片

onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用 

你可能感兴趣的:(Android)