简介
平板,手机,尺寸不一样,界面会不同,碎片切换管理,碎片的声明周期
Fragment
Fragment 是一种可以嵌入在活动当中的 UI 片段,它能让程序更加合理和充分地利用大屏幕的空间。
动态添加碎片
修改包含碎片的布局,添加 FrameLayout 布局,用于动态添加碎片布局。
在代码中向 FrameLayout 添加内容,实现动态添加碎片的功能。
private void replaceFragment(Fragment fragment) {
/**
* 创建待添加的碎片实例,在这里就是参数 fragment
* 获取 FragmentManager, 在活动中直接调用 getSupportFragmentManager() 方法
* 开启一个事务,通过调用 beginTransaction() 方法
* 向容器添加或替换碎片,使用 replace() 方法
* 可以通过方法 addToBackStack() 将这个事务添加到返回栈中,参数一般传入 null
* 提交事务,调用 commit() 方法
*/
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_fragment,fragment);
transaction.addToBackStack(null);
transaction.commit();
}
活动与碎片直接的通信
活动获取碎片实例(eg.):
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
碎片获取活动实例(eg.):
MainActivity activity = (MainActivity) getActivity();
碎片的生命周期
除了活动有的几个状态,还添加了以下几个状态:
onAttach(): 当活动和碎片建立关联的时候调用
onCreateView(): 为碎片加载布局的时候调用
onActivityCreated(): 确保与碎片相关联的活动一定已经创建完毕的时候调用
onDestroyView(): 当碎片关联的视图被移除的时候调用
onDetach(): 当碎片和活动解除关联的时候调用。
关键代码
MainActivity.java
package com.example.fragmenttest;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.fragmenttest.fragment.AnotherRightFragment;
import com.example.fragmenttest.fragment.RightFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
replaceFragment(new RightFragment());
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button:
replaceFragment(new AnotherRightFragment());
break;
default:break;
}
}
private void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_fragment,fragment);
//back return before fragment
transaction.addToBackStack(null);
transaction.commit();
}
}
RightFragment.java
package com.example.fragmenttest.fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
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;
import com.example.fragmenttest.R;
/**
* Created by zl on 19-10-16.
*/
public class RightFragment extends Fragment {
private static final String TAG = "RightFragment";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: ");
return inflater.inflate(R.layout.right_fragment,container,false);
}
@Override
public void onAttach(@NonNull Context context) {
Log.d(TAG, "onAttach: ");
super.onAttach(context);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Log.d(TAG, "onCreate: ");
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
Log.d(TAG, "onActivityCreated: ");
super.onActivityCreated(savedInstanceState);
}
@Override
public void onStart() {
Log.d(TAG, "onStart: ");
super.onStart();
}
@Override
public void onResume() {
Log.d(TAG, "onResume: ");
super.onResume();
}
@Override
public void onPause() {
Log.d(TAG, "onPause: ");
super.onPause();
}
@Override
public void onStop() {
Log.d(TAG, "onStop: ");
super.onStop();
}
@Override
public void onDestroyView() {
Log.d(TAG, "onDestroyView: ");
super.onDestroyView();
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy: ");
super.onDestroy();
}
@Override
public void onDetach() {
Log.d(TAG, "onDetach: ");
super.onDetach();
}
}