UI Fragment

1.创建UI Fragment

  • 定义布局
  • 创建UI Fragment的类
    1.实现Fragment的生命周期方法:
     Fragment.onCreate(Bundle)是public方法,而Activity.onCreate(Bundle)是protected方法。Fragment生命周期方法必须是public方法,因为托管Fragment的Activity要调用它们。
    类似于ActivityFragment同样具有保存及获取状态的bundle也可以根据需要使用Fragment.onSaveInstanceState(Bundle)方法。
    Fragment的视图没有在Fragment.onCreate(Bundle)方法中生成而是在onCreateView(LayoutInflater, ViewGroup, Bundle)中生成。该方法实例化Fragment视图的布局,然后将实例化的View返回给托管Activity。其中Bundle参数用来存储恢复数据
public class CrimeFragment extends Fragment {
  private Crime mCrime;

  //进行一些数据的初始化工作
  @Override
  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mCrime = new Crime();
    }

  //进行视图和控件的初始化工作
  @Override
  public View onCreateView(LayoutInflate inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_crime, container, false);
        return v;
    }
        
}

2.向FragmentManager添加UI Fragment

 要将Fragment托管给Activity,需要调用Activity的FragmentManagerFragmentManager类具体管理Fragment队列Fragment事务回退栈。在Activity.onCreate(Bundle)方法中获取FragmentManager,并将Fragment交给它管理。

public class CrimeActivity extends AppCompatActivity {
     @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_crime);  
            
            FragmentManager fm = getSupportFragmentManager();
            //从fm中获取fragment
            Fragment fragment = fm.findFragmentById(R.id.fragment_container);

            if(fragment == null) {
               fragment = new CrimeFragment();
               //创建fragment事务,添加、替换、删除fragment
               fm.beginTransaction()
                      //将fragment添加到指定Id的视图容器中  
                     .add(R.id.fragment_container, fragment)
                     .commit(); 
          }
      }
}

 R.layout.activity_crime布局如下:

<FrameLayout xmlns:android="http"//schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

3.FragmentManager与Fragment生命周期

Fragment生命周期方法:

onAttach(Context)->onCreate(Bundle)->onCreateView(....)

->onActivityCreated(Bundle)

->onStart()->onResume()->onPause()->onStop()->onDestroyView()

Activity的FragmentManager负责调用队列中Fragment的生命周期方法。在FragmentManager中添加Fragment并开始管理时,Fragment.onAttach(Context)、onCreate(Bundle)、onCreateView(....)方法会被调用。
 由于一般都是在Activity.onCreate(Bundle)方法中添加Fragment,所以当Activity.onCreate(Bundle)执行后Fragment.onActivityCreated(Bundle)方法会被调用
之后,在Activity处于正常的运行状态时,FragmentManager会促使Fragment调用一系列必要的生命周期方法与Activity的最新状态保持一致

4.Fragment滥用

 应用单屏最多使用2-3个Fragment。Fragment是用来封装关键组件以便复用,也就是说将屏幕分为主要的2-3个部分,这些部分利用Fragment进行封装。对于零碎的小组件直接使用各类控件即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容