Day04frament

Fragment的实现方式

创建一个类,继承Fragment
重写父类的方法onCreateView()
在onCreateView()方法中,为Fragment创建UI界面

Java代码
​ MyFragment类
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MyFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return getLayoutInflater().inflate(R.layout.fragment_layout, null);
}
}

​ MainActivity类
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

private MyFragment myFragment;
private MyFragment1 myFragment1;
private FragmentManager fragmentManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //创建fragment对象
    myFragment = new MyFragment();
    myFragment1 = new MyFragment1();
    //获得fragment的管理类对象
    fragmentManager = getSupportFragmentManager();
    //获得事务管理者
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    //添加fragment
    fragmentTransaction.add(R.id.zhen, myFragment, "叽里咕噜");
    fragmentTransaction.add(R.id.zhen, myFragment1, "123");
    fragmentTransaction.hide(myFragment1);

// //移除fragment
// fragmentTransaction.remove(myFragment);
// //显示fragment
// fragmentTransaction.show(myFragment);
// //隐藏fragment
// fragmentTransaction.hide(myFragment);
// //替换
// fragmentTransaction.replace(R.id.zhen,myFragment);
//提交事务
fragmentTransaction.commit();
}

public void show(View view) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.show(myFragment1);
    fragmentTransaction.commit();
}

public void remove(View view) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.remove(myFragment);
    fragmentTransaction.commit();
}

public void hide(View view) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.hide(myFragment1);
    fragmentTransaction.commit();
}

public void replace(View view) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.zhen, myFragment);
    fragmentTransaction.commit();
}

}

Fragment的生命周期

onAttach() Fragment与Activity关联
onCreate() 创建Fragment
onCreateView() 创建Fragment视图
onActivityCreated() 当Activity中的onCreate方法执行完后调用
onStart() 启动Fragment
onResume() Fragment可见
onPause() Fragment不可见
onStop() Fragment停止
onDestoryView() 销毁Fragment视图
onDestory() 销毁Fragment对象
onDetach() Fragment和Activity解除关联的时候调用

add生命周期执行

onAttach()
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()

remove时生命周期执行

onPause()
onStop()
onDestoryView()
onDestory()
onDetach()

replace时生命周期执行

新Fragment --> onAttach()
新Fragment --> onCreate()
旧Fragment --> onPause()
旧Fragment --> onStop()
旧Fragment --> onDestroyView()
旧Fragment --> onDesttoy()
旧Fragment --> onDetach()
新Fragment --> onCreateView()
新Fragment --> onActivityCreated()
新Fragment --> onStart()
新Fragment --> onResume()

add时Fragment和Fctivity的生命周期执行

Activity --> onCreate()
Fragment --> onAttach()
Fragment --> onCreate()
Fragment --> onCreateView()
Fragment --> onActivityCreated()
Fragment --> onStart()
Activity --> onResume()
Fragment --> onResume()

Activity类
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public class MainActivity extends AppCompatActivity {

MyFragment myFragment = new MyFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void show(View view) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.frameLayout, myFragment, "name");
    fragmentTransaction.commit();
}

public void receive(View view) {
    Bundle bundle = myFragment.getArguments();
    String key = bundle.getString("key");
    if (key != null) {
        Toast.makeText(this, key, Toast.LENGTH_SHORT).show();
    }
}

}

handler传值
MyFragment类
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

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

public class MyFragment extends Fragment {
private Handler handler;
public MyFragment(Handler handler) {
this.handler = handler;
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = getLayoutInflater().inflate(R.layout.fragment_layout, null);
    view.findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Message message = Message.obtain();
            message.what = 1;
            message.obj = "我是fragment发送过来的数据";
            handler.sendMessage(message);
        }
    });
    return  view;
}

}

Activity类
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public class MainActivity extends AppCompatActivity {

Handler handler = new Handler(){
    @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 1:
                Toast.makeText(MainActivity.this, (String)msg.obj, Toast.LENGTH_SHORT).show();
                break;
        }
    }
};
MyFragment myFragment = new MyFragment(handler);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void show(View view) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.frameLayout, myFragment, "name");
    fragmentTransaction.commit();
}

}

接口回调传值

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

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

public class MyFragment extends Fragment {

private EditText input;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    //设置布局
    View view = getLayoutInflater().inflate(R.layout.fargment, null);
    input = view.findViewById(R.id.input);
    return view;
}

//接口回调
public void getEditText(Interface i){
    String msg = input.getText().toString();
    i.getInput(msg);
}

//接口
public interface Interface{
    public void getInput(String msg);
}

}

MainActivity类
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

public class MainActivity extends AppCompatActivity {

private MyFragment fragment;
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fragment = new MyFragment();
    fragmentManager = getSupportFragmentManager();
}


//添加fragment
public void show(View view) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.framelayout,fragment,"123");
    fragmentTransaction.addToBackStack("123");
    fragmentTransaction.commit();
}


public void receive(View view) {
    //使用接口回调的方法获取数据
    fragment.getEditText(new MyFragment.Interface() {
        @Override
        public void getInput(String msg) {
            Toast.makeText(MainActivity.this, "输入了 --->"+msg, Toast.LENGTH_SHORT).show();
        }
    });
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值