【问题标题】:How to save selected item from viewPager in Kotlin?如何从 Kotlin 的 viewPager 中保存选定的项目?
【发布时间】:2021-10-23 17:03:09
【问题描述】:

我有这个片段用 viewPager 处理 3 个项目:

onCreateView:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {

    val view: View = inflater.inflate(R.layout.fragment_ejournal, container, false)
    viewPager2 = view.findViewById(R.id.viewpager_main)
    tabs = view.findViewById(R.id.tabs_main)
    item1 = view.findViewById(R.id.item1);
    item1.setText("My Planner")
    item2 = view.findViewById(R.id.item2);
    item2.setText("My Heart")
    item3 = view.findViewById(R.id.item3);
    item3.setText("My Soul")
    item1.setOnClickListener(this);
    item2.setOnClickListener(this);
    item3.setOnClickListener(this);
    def = item2.getTextColors();
    val fragmentAdapter = EjournalAdapter(childFragmentManager)
    viewPager2.adapter = fragmentAdapter
    viewPager2.isNestedScrollingEnabled = false
    tabs.setupWithViewPager(viewPager2)
    return view
}

点击功能:

override fun onClick(view: View) {
    if(view.id == R.id.item1)
    {
        item1.setTextColor(R.color.maincolor_purple)
        item1.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_selected
        )
        item2.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_unselected

        )
        item3.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_unselected
        )
        item1.elevation = 3F
        item2.elevation = 2F
        item3.elevation = 1F
        item2.setTextColor(def);
        item3.setTextColor(def);
        viewPager2.setCurrentItem(0)


    }
    else if (view.id == R.id.item2)
    {
        item1.setTextColor(def)
        item1.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_unselected
        )
        item2.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_selected
        )
        item3.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_unselected
        )
        item2.setTextColor(R.color.maincolor_purple)

        item1.elevation = 1F
        item2.elevation = 3F
        item3.elevation = 2F
        item3.setTextColor(def)
        val size = item2.width
        viewPager2.setCurrentItem(1)
    }
    else if (view.id == R.id.item3)
    {
        item1.setTextColor(def)
        item1.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_unselected
        )
        item2.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_unselected
        )
        item3.background = ContextCompat.getDrawable(
            requireContext(),
            R.drawable.tab_bg_selected
        )
        item3.setTextColor(R.color.maincolor_purple)
        item1.elevation = 1F
        item2.elevation = 2F
        item3.elevation = 3F
        item2.setTextColor(def)
        val size = item2.width * 2
        viewPager2.setCurrentItem(2)
    }
}

所以上面的代码在一个片段中,每个项目将导航到不同的片段

一切正常,但是当我单击任何项​​目以导航到不同的片段并从该片段按返回以返回此项目时,项目选择将始终返回到第一个项目

例如,item2 将导航到“我的心”片段,当我从“我的心”片段按回时,我希望选择的项目是“我的心”项目

如何做到这一点?

在我调用的另一个片段中:

getActivity()?.onBackPressed();

【问题讨论】:

    标签: java android kotlin android-fragments android-viewpager


    【解决方案1】:

    方法一:

    您正在尝试做所谓的Sharing State between fragments 最好使用ViewModel,它是Android Jetpack的一部分

    Android 文档对如何做到这一点有很好的解释here

    如果您正在寻找 Java 示例,可以找到它here

    方法二:

    另一种方法是在活动中创建一个接口并在两个片段之间共享它。返回数据的fragment调用接口的方法,接收数据的fragment实现接口,调用时观察fragment中的数据

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多