kotlin关于fragment主页

这篇博客介绍了如何在Kotlin中处理Fragment,包括主界面设计、BaseFragment的创建、具体Fragment的实现以及主界面布局的设置。提供了一种简洁的代码实现思路,并提醒读者需补充缺失的图片资源和布局文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.其实网上有许多种,关于kotlin的写法,我这里简单贴一下代码和思路

效果图:

2.主界面

package com.example.admin.zkotlin

import android.annotation.TargetApi
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.PixelFormat
import android.hardware.Camera
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.os.Handler
import android.util.Log
import android.view.Surface
import android.view.SurfaceHolder
import android.view.SurfaceView
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import kotlinx.android.synthetic.main.activity_main.*
import java.io.File
import java.io.FileOutputStream


class MainActivity : AppCompatActivity() {
    // 创建不可变List listof
    private var fragments:List<Fragment> = listOf(HomePageFragment(),InterviewPageFragment(),QuestionAndAnswerFragment(),MineFragment())
    private var currentFragment:Fragment ?=null
    // 数组容器  创建数组
    private val icons = arrayOf(arrayOf(R.mipmap.home_page_selected,R.mipmap.interview_guide_selected,
            R.mipmap.ask_every_day_selected,R.mipmap.my_page_selected),
            arrayOf(R.mipmap.home_page_unselected,R.mipmap.interview_guide_unselected,
                    R.mipmap.ask_every_day_unselected,R.mipmap.my_page_unselected))
    //lateinit(延迟加载)
    private lateinit var buttons:Array<TextView>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        initData()
        initEvent()
    }

    private fun initData(){
        buttons = arrayOf(home_page,interview_guide,ask_every_day,my_page)
        switchFragment(fragments[0])
    }

    private fun initEvent(){
        buttons.forEach { it->
            it.setOnClickListener {
                switchFragment(fragments[buttons.indexOf(it)])
            }
        }
    }

    private fun switchFragment(fragment: Fragment){
        if (currentFragment == fragment){
            return
        }
        supportFragmentManager.fragments.forEach{
            if (it.isAdded && !it.isHidden){
                supportFragmentManager.beginTransaction().hide(it).commit()
            }
        }
        if (!fragment.isAdded){
            supportFragmentManager.beginTransaction().add(R.id.fragment_layout,fragment).commit()
        }else{
            supportFragmentManager.beginTransaction().show(fragment).commit()
        }
        currentFragment = fragment
        if (currentFragment !=null){
            val indexof = fragments.indexOf(currentFragment!!)
            (buttons.indices).forEach {
                val drawable = if(it == indexof) getDrawable(icons[0][it]) else getDrawable(icons[1][it])
                buttons[it].setCompoundDrawablesWithIntrinsicBounds(null,drawable,null,null)
            }
        }

    }

    inner class Adapter(fm:FragmentManager): FragmentPagerAdapter(fm){
        override fun getItem(position: Int): Fragment {
            return fragments[position]
        }

        override fun getCount(): Int {
            return fragments.count()    //返回此集合中的元素数
        }
    }

    //  修饰为伴生对象,伴生对象在类中只能存在一个,类似于java中的静态方法 Java 中使用类访问静态成员,静态方法。
    companion object{
        fun newIntent(context:Context): Intent {
            return Intent(context,MainActivity::class.java)
        }
    }


}

3.BaseFragment

package com.example.admin.zkotlin

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

/**
Created by wrs on 10/12/2019,下午 3:01
projectName: ZKotlin
packageName: com.example.admin.zkotlin
 */
open abstract class BaseFragment : Fragment(){
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(getLayoutRes(),container,false)
    }

    abstract fun getLayoutRes():Int
}

4.具体的fragment

package com.example.admin.zkotlin;

import androidx.fragment.app.Fragment;

/**
 * Created by wrs on 10/12/2019,上午 11:47
 * projectName: ZKotlin
 * packageName: com.example.admin.zkotlin
 */
public class HomePageFragment extends BaseFragment {
    @Override
    public int getLayoutRes() {
        return R.layout.fragment_home;
    }
}

5.主界面布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/fragment_layout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@id/bottom_container"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:id="@+id/bottom_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <TextView
            android:id="@+id/home_page"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:drawableTop="@mipmap/home_page_selected"
            android:gravity="center"
            android:padding="8dp"
            android:text="首页"
            android:textSize="10sp"
            tools:ignore="SmallSp" />

        <TextView
            android:id="@+id/interview_guide"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:drawableTop="@mipmap/interview_guide_unselected"
            android:gravity="center"
            android:padding="8dp"
            android:text="面试指南"
            android:textSize="10sp"
            tools:ignore="SmallSp" />

        <TextView
            android:id="@+id/ask_every_day"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:drawableTop="@mipmap/ask_every_day_unselected"
            android:gravity="center"
            android:padding="8dp"
            android:text="每日一问"
            android:textSize="10sp"
            tools:ignore="SmallSp" />

        <TextView
            android:id="@+id/my_page"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:drawableTop="@mipmap/my_page_unselected"
            android:gravity="center"
            android:padding="8dp"
            android:text="我的"
            android:textSize="10sp"
            tools:ignore="SmallSp" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

end,差不多就这些,其他的几个fragment,都是重复一样的内容,另外缺的图片资源和布局资源,请自行添加补上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值