设置片段顺序首选项

时间:2019-06-06 18:55:14

标签: android android-fragments kotlin

我正在创建应用程序的一部分,其中有一个主要活动,在其中我添加了两个片段。它们是两个相同的ScrollView,我只是在其中  不同的文字。我想在它们之间做一个选择。

所以我的想法是: 我们有一个片段A,它将始终首先显示,而片段B在屏幕上不可见。我想在用户想要的时候放一个按钮以交换成两个片段。

那么,发展这个想法的最好方法是什么?我正在发布一些与片段A相关的代码:

主要片段活动:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                             android:layout_width="match_parent"
                                             android:layout_height="match_parent"
                                             android:id="@+id/listaMain">
    <fragment android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:name="com.example.comprasapp.Lists.ListsFragments.ListViewSolo"
              android:id="@+id/scrollSoloList"/>

    </LinearLayout>

片段A:

<ScrollView
             xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools" 
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:id="@+id/scrollSoloList"
             android:layout_marginTop="8dp">
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/textListaSolo" tools:targetApi="o"/>
</ScrollView>

片段A控制器类:

class ListViewSolo : Fragment(){
    var facade = Facade()
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.lista_solo, container, true)
    }

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        view?.findViewById<TextView>(R.id.textListaSolo)?.autoSizeMaxTextSize
        view?.findViewById<TextView>(R.id.textListaSolo)?.text = (facade.setListSolo())//I'm just setting the text on my TextView here
    }
    companion object{
        // Aqui simplemente estás creando un objeto ListViewSolo por si en algun momento tienes que utilizarlo

        fun newInstance(): ListViewSolo {
            return ListViewSolo()
        }
    }

}                     

如果我可以澄清一些问题,请问。

2 个答案:

答案 0 :(得分:1)

您不使用ViewPager,它的主要用途是达到您的标准。

它还可以通过简单的animation在片段之间滑动implementation

请查看this教程以了解如何在您的应用中实现ViewPager

答案 1 :(得分:1)

您可以使用容器在片段之间进行切换,

主要片段活动:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                                 android:layout_width="match_parent"
                                                 android:layout_height="match_parent"
                                                 android:id="@+id/listaMain">

            <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:id="@+id/fragment_container"
               android:layout_width="match_parent"
               android:layout_height="match_parent" />

</LinearLayout>

要在片段之间进行切换,您可以在任意位置使用它:

val fragment = ListViewSolo() // your fragment instance

val transaction = supportFragmentManager.beginTransaction()
                    transaction.replace(R.id.fragment_container, fragment)
                    add.commit()