控制元件-----fragment使用(一)
阿新 • • 發佈:2019-01-11
Fragment的使用一般可以分為兩種場景:一、Fragment與ViewPager連用,二、Fragment單獨使用。
一、Fragment與ViewPager連用
1、在activity的xml裡新增ViewPager控制元件
<android.support.v4.view.ViewPager android:id="@+id/vp_fragment" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:text="Hello World!" />
2、新建繼承自Fragment(v4包)的類,可起名為Fragment1(可在包上右鍵new -- fragment -- blank fragment),類似的可新建多個(與viewPager連用)
class Fragment1 : Fragment() { private var param1: String? = null private var param2: String? = null private var listener: OnFragmentInteractionListener? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_fragment1, container, false) } fun onButtonPressed(uri: Uri) { listener?.onFragmentInteraction(uri) } override fun onAttach(context: Context) { super.onAttach(context) if (context is OnFragmentInteractionListener) { listener = context } else { throw RuntimeException(context.toString() + " must implement OnFragmentInteractionListener") } } override fun onDetach() { super.onDetach() listener = null } //需要注意的是這個介面,activity必須實現,這個可以實現fragment向activity發訊息 interface OnFragmentInteractionListener { fun onFragmentInteraction(uri: Uri)//引數可以是其他型別 } companion object { private const val ARG_PARAM1 = "param1" private const val ARG_PARAM2 = "param2" @JvmStatic fun newInstance(param1: String, param2: String) = Fragment1().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } }
3、新建繼承自FragmentAdapter的類,可,命名為MyFragmentAdapter
class MyFragmentAdapter(fm: FragmentManager, fragments: MutableList<Fragment>) : FragmentPagerAdapter(fm) { private var fragmentList: MutableList<Fragment> = fragments override fun getItem(position: Int): Fragment { return fragmentList[position] } override fun getCount(): Int { return fragmentList.size } }
4、準備工作準備好以後,開始新增Activity裡的程式碼。注意要繼承FragmentActivity類。
class MyFragmentActivity : FragmentActivity() , Fragment1.OnFragmentInteractionListener , Fragment2.OnFragmentInteractionListener { override fun onFragmentInteraction222(string: String) { Log.d("baibai", "onFragmentInteraction222") Log.d("baibai", string) } override fun onFragmentInteraction(uri: Uri) { } private lateinit var mFragments: MutableList<Fragment> private lateinit var mFragment1: Fragment1 private lateinit var mFragment2: Fragment2 private lateinit var mFragmentAdapter: MyFragmentAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my_fragment) initFragment() initListener() } private fun initFragment() { mFragment1 = Fragment1.newInstance("bai", "yun") mFragment2 = Fragment2.newInstance("111", "222") mFragments = mutableListOf() mFragments.add(mFragment1) mFragments.add(mFragment2) } private fun initListener() { mFragmentAdapter = MyFragmentAdapter(this.supportFragmentManager, mFragments) vp_fragment.adapter = mFragmentAdapter vp_fragment.setOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) { } override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { //滑動的過程中 } override fun onPageSelected(position: Int) { //viewPager確定某一頁選中後 } }) } }