当前位置: 首页 > news >正文

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);@Overridepublic void onAttach(@NonNull Context context) {super.onAttach(context);}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setData(savedInstanceState);}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View fragmentView  = inflater.inflate(setContentLayout(),container,false);return fragmentView;}@Overridepublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);// 控件setControls(view);}@Overridepublic void onStart() {super.onStart();}@Overridepublic void onResume() {super.onResume();}@Overridepublic void onPause() {super.onPause();}@Overridepublic void onStop() {super.onStop();}@Overridepublic void onDestroy() {super.onDestroy();}@Overridepublic 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;@Overrideprotected void setData(Bundle savedInstanceState) {}@Overrideprotected int setContentLayout() {return R.layout.fragment_home;}@Overrideprotected 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"><TextViewandroid: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.FragmentContainerViewandroid:id="@+id/fragment_container_view"android:layout_width="match_parent"android:layout_height="match_parent"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:orientation="horizontal"><Buttonandroid:id="@+id/homeBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="home"/><Buttonandroid:id="@+id/shoppingBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="shopping"/><Buttonandroid: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;// fragmentprivate HomeFragment homeFragment = new HomeFragment();private ShoppingFragment shoppingFragment = new ShoppingFragment();private MyFragment myFragment = new MyFragment();@Overridepublic void setData(Bundle savedInstanceState) {// 竖屏setScreenPortrait(true);}@Overridepublic int setContentLayout() {return R.layout.main_layout;}@Overridepublic 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() {@Overridepublic void onClick(View view) {// 必须写下面的三条语句transaction = fragmentManager.beginTransaction();transaction.replace(R.id.fragment_container_view,homeFragment);transaction.commit();}};View.OnClickListener shopClick = new View.OnClickListener() {@Overridepublic void onClick(View view) {// 必须写下面的三条语句transaction = fragmentManager.beginTransaction();transaction.replace(R.id.fragment_container_view,shoppingFragment);transaction.commit();}};View.OnClickListener myClick = new View.OnClickListener() {@Overridepublic void onClick(View view) {// 必须写下面的三条语句transaction = fragmentManager.beginTransaction();transaction.replace(R.id.fragment_container_view,myFragment);transaction.commit();}};}

http://www.lryc.cn/news/297690.html

相关文章:

  • [C#] 如何对列表,字典等进行排序?
  • Mac 下载安装Java、maven并配置环境变量
  • 【多模态】27、Vary | 通过扩充图像词汇来提升多模态模型在细粒度感知任务(OCR等)上的效果
  • |Python新手小白低级教程|第二十章:函数(2)【包括石头剪刀布判断程序(模拟版)】
  • vue3 之 商城项目—home
  • git flow与分支管理
  • 【Linux】学习-进程信号
  • webgis后端安卓系统部署攻略
  • 【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)
  • 【多模态大模型】视觉大模型SAM:如何使模型能够处理任意图像的分割任务?
  • Shell之sed
  • AJAX——认识URL
  • 《Docker极简教程》--Docker环境的搭建--在Linux上搭建Docker环境
  • 开源微服务平台框架的特点是什么?
  • C#系列-C#操作UDP发送接收数据(10)
  • 突破编程_C++_面试(基础知识(10))
  • 初步探索Pyglet库:打造轻量级多媒体与游戏开发利器
  • 【npm】安装全局包,使用时提示:不是内部或外部命令,也不是可运行的程序或批处理文件
  • Go 语言 for 的用法
  • 熵权法Python代码实现
  • 浏览器提示ERR_SSL_KEY_USAGE_INCOMPATIBLE解决
  • 使用深度学习进行“序列到序列”分类
  • Python和Java的区别(不断更新)
  • Ubuntu22.04 gnome-builder gnome C 应用程序习练笔记(三)
  • vue electron 应用在windows系统上以管理员权限打开应用
  • c实现链表
  • 力扣231. 2 的幂(数学,二分查找,位运算)
  • Maven私服部署与JAR文件本地安装
  • 【MySQL】字符串函数的学习
  • AI助力农作物自动采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建作番茄采摘场景下番茄成熟度检测识别计数分析系统