如何在 Kotlin 片段内的按钮之间切换片段?
Posted
技术标签:
【中文标题】如何在 Kotlin 片段内的按钮之间切换片段?【英文标题】:How to change between fragments with buttons inside the fragments in Kotlin? 【发布时间】:2020-04-18 07:48:09 【问题描述】:我希望我不是在问一个重复的问题,而是只在 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.***.fragment1"
android:layout_
android:layout_
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
还有片段2
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
【问题讨论】:
如果你想在片段之间导航,你应该使用导航组件developer.android.com/guide/navigation/… 或者你可以使用FragmentTransactions,这和FragmentNavigator在Navigation组件中使用的机制是一样的 【参考方案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 laout 中:
<FrameLayout
android:id="@+id/container"
android:layout_
android:layout_/>
</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()
在片段2中:
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()
【讨论】:
抱歉,失败了。我正在使用 kotlin,这看起来像 java。 在 kotlin 中更改让我知道是否需要更多帮助。您也可以使用此链接了解更多详细信息:medium.com/thoughts-overflow/… 这是科蒂林!我只是添加了一个简单的代码。但是解决方法是正确的。 你应该用 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()
还有片段2
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()
【讨论】:
使用<fragment>
标签时不能使用replace()
感谢重写,我尝试了该代码,结果如下:(29, 13): Unresolved reference: supportFragmentManager 我需要特定的导入吗?以上是关于如何在 Kotlin 片段内的按钮之间切换片段?的主要内容,如果未能解决你的问题,请参考以下文章