Android 自定义BaseFragment

直接上代码:

BaseFragment代码:

复制代码
package com.example.custom.fragment;

import android.content.Context;
import android.os.Bundle;
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;

/**
 * 基本Fragment
 * */
public abstract class BaseFragment extends Fragment {


    /**
     * 设置数据
     * */
    protected abstract void setData(Bundle savedInstanceState);

    /**
     * 绑定布局
     * */
    protected abstract int setContentLayout();

    /**
     * 初始化组件
     * */
    protected abstract void setControls(View view);


    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setData(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View fragmentView  = inflater.inflate(setContentLayout(),container,false);
        return fragmentView;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 控件
        setControls(view);
    }

    @Override
    public void onStart() {
        super.onStart();

    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
}

HomeFragment代码:

复制代码
package com.example.custom.fragment;

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

import com.example.custom.R;

public class HomeFragment extends BaseFragment{

    private TextView mainTv;

    @Override
    protected void setData(Bundle savedInstanceState) {

    }

    @Override
    protected int setContentLayout() {
        return R.layout.fragment_home;
    }

    @Override
    protected void setControls(View view) {
        mainTv = view.findViewById(R.id.mainTV);
        mainTv.setText("Home页面");
    }



}

HomeFragment布局代码:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <TextView
        android:id="@+id/mainTV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="home"/>


</LinearLayout>

使用:

(1) main_layout.xml代码

复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <Button
            android:id="@+id/homeBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="home"/>
        <Button
            android:id="@+id/shoppingBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="shopping"/>
        <Button
            android:id="@+id/myBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="my"/>

    </LinearLayout>

</RelativeLayout>

(2) MainActivity.java代码:

复制代码
package com.example.custom.main;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.example.custom.R;
import com.example.custom.activity.BaseActivity;
import com.example.custom.fragment.HomeFragment;
import com.example.custom.fragment.MyFragment;
import com.example.custom.fragment.ShoppingFragment;

public class MainActivity extends BaseActivity {

    private Button home,shop,my;

    // 获取Fragment管理对象(此方法只能在继承AppCompatActivity中使用)
    private FragmentManager fragmentManager = getSupportFragmentManager();
    private FragmentTransaction transaction;
    // fragment
    private HomeFragment homeFragment = new HomeFragment();
    private ShoppingFragment shoppingFragment = new ShoppingFragment();
    private MyFragment myFragment = new MyFragment();


    @Override
    public void setData(Bundle savedInstanceState) {
        // 竖屏
        setScreenPortrait(true);
    }

    @Override
    public int setContentLayout() {
        return R.layout.main_layout;
    }

    @Override
    public void setControls() {
        home = findViewById(R.id.homeBtn);
        home.setOnClickListener(homeClick);

        shop = findViewById(R.id.shoppingBtn);
        shop.setOnClickListener(shopClick);

        my = findViewById(R.id.myBtn);
        my.setOnClickListener(myClick);
        // 默认home
        // 必须写下面的三条语句
        transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.fragment_container_view,homeFragment);
        transaction.commit();
    }


    View.OnClickListener homeClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 必须写下面的三条语句
            transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.fragment_container_view,homeFragment);
            transaction.commit();
        }
    };

    View.OnClickListener shopClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 必须写下面的三条语句
            transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.fragment_container_view,shoppingFragment);
            transaction.commit();
        }
    };

    View.OnClickListener myClick = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 必须写下面的三条语句
            transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.fragment_container_view,myFragment);
            transaction.commit();
        }
    };


}
相关推荐
Jerry说前后端1 小时前
Android 数据可视化开发:从技术选型到性能优化
android·信息可视化·性能优化
Meteors.2 小时前
Android约束布局(ConstraintLayout)常用属性
android
alexhilton3 小时前
玩转Shader之学会如何变形画布
android·kotlin·android jetpack
whysqwhw7 小时前
安卓图片性能优化技巧
android
风往哪边走7 小时前
自定义底部筛选弹框
android
Yyyy4828 小时前
MyCAT基础概念
android
Android轮子哥8 小时前
尝试解决 Android 适配最后一公里
android
雨白9 小时前
OkHttp 源码解析:enqueue 非同步流程与 Dispatcher 调度
android
风往哪边走10 小时前
自定义仿日历组件弹框
android
没有了遇见10 小时前
Android 外接 U 盘开发实战:从权限到文件复制
android