如何在Kotlin中使用片段内部的按钮在片段之间进行切换?

时间:2019-12-29 00:28:35

标签: android android-fragments button kotlin fragment

我希望我不要问一个重复的问题,而只是在Java中找到了这个答案,而我正在使用Kotlin。我正在尝试使用按钮在片段之间交换。这是我的代码。首先,谢谢。

对于主要

       class MainActivity : AppCompatActivity (){
        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
}

及其xml文件

           <fragment
            android:id="@+id/main"
            android:name="com.example.stackoverflow.fragment1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:layout="@layout/fragment_fragment1"/>
</LinearLayout>

对于Fragment1

      class fragment1 : Fragment(){
       override fun onCreateView(Layoutinflater: LayoutInflater,
                              container: ViewGroup?, savedInstantState: Bundle?): View? {
        return Layoutinflater.inflate(R.layout.fragment_fragment1, container, false)
    }
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        button1.setBackgroundColor(Color.parseColor("#faaf45"))
     button1.setOnClickListener(){
           //Not sure what to put here
        }
}

还有fragment2

       class fragment2 : Fragment(){
        override fun onCreateView(Layoutinflater: LayoutInflater,
                              container: ViewGroup?, savedInstantState: Bundle?): View? {
        return Layoutinflater.inflate(R.layout.fragment_fragment2, container, false)
    }
         override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         button2.setBackgroundColor(Color.parseColor("#aaaf45"))
       button2.setOnClickListener(){
         //Not sure what to put here
        }
}

2 个答案:

答案 0 :(得分:1)

在MainActivity中:

class MainActivity : AppCompatActivity (){
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    }

    fun changeFragment(fragmnet:Fragment){
      getFragmentManager()
                .beginTransaction()
                .replace(R.id.container, fragment)
                .commit();
    }
}

在MainActivity消息中:

     <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
 </LinearLayout>

在片段1中:

class fragment1 : Fragment(){
   override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View?  {
    return Layoutinflater.inflate(R.layout.fragment_fragment1, container,false)
    }
  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    button1.setBackgroundColor(Color.parseColor("#faaf45"))
    button1.setOnClickListener(){
       (context as MainActivity).changeFragment(fragmnet2.newInstance())
    }
  companion object {
    fun newInstance(): fragment1 {
        return fragment1()
     }
    }
 }

在fragment2中:

class fragment2 : Fragment(){
    override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? {
    return Layoutinflater.inflate(R.layout.fragment_fragment2, container, false)
   }
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
     super.onViewCreated(view, savedInstanceState)
     button2.setBackgroundColor(Color.parseColor("#aaaf45"))
   button2.setOnClickListener(){
     (context as MainActivity).changeFragment(fragmnet1.newInstance())
    }

  companion object {
      fun newInstance(): fragment2 {
        return fragment2()
       }
     }
 }

答案 1 :(得分:0)

 class fragment1 : Fragment(){
   override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? {
    return Layoutinflater.inflate(R.layout.fragment_fragment1, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    button1.setBackgroundColor(Color.parseColor("#faaf45"))
 button1.setOnClickListener(){
    supportFragmentManager.beginTransaction()
    .replace(R.id.container, fragment2()).commit()        }
 }

还有fragment2

class fragment2 : Fragment(){
    override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? {
    return Layoutinflater.inflate(R.layout.fragment_fragment2, container, false)
}
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
     super.onViewCreated(view, savedInstanceState)
     button2.setBackgroundColor(Color.parseColor("#aaaf45"))
   button2.setOnClickListener(){
        supportFragmentManager.beginTransaction()
    .replace(R.id.container, fragment1()).commit() 
    }
 }