kotlin關於fragment主頁

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,都是重複一樣的內容,另外缺的圖片資源和佈局資源,請自行添加補上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章