RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1444138
Accepted
user515715
user515715
Asked:2022-08-30 19:40:43 +0000 UTC2022-08-30 19:40:43 +0000 UTC 2022-08-30 19:40:43 +0000 UTC

如何在 Fragment 中使用 Spinner?

  • 772

我在里面添加override fun onCreateView了这段代码:

 val array = arrayOf("Option 1", "Option 2", "Option 3")
    
            spinner = view?.findViewById<Spinner>(R.id.spinner)
            spinner?.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array)
    
            spinner?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
                override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                    //  result?.text = array.get(p2)
    
                    when(p2) {
                       // 0 -> result?.text = array.get(0)
                      //  1 -> result?.text = array.get(1)
                      //  2 -> result?.text = array.get(2)
                    }
                }
    
    
                override fun onNothingSelected(p0: AdapterView<*>?) {
                    // result?.text = array.get(0)
                }
    
            }

ArrayAdapter红色下划线

在此处输入图像描述

一切MainActivity正常。请告诉我如何制作它,以便片段内的所有内容也正常工作。

xml片段:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".presentation.ExchangeRateFragment">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <androidx.appcompat.widget.AppCompatSpinner
                android:id="@+id/spinner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                tools:ignore="MissingConstraints" />

            <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                tools:ignore="MissingConstraints,RedundantNamespace">

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/sortAlphabetAscending"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                android:layout_weight="1"
                android:layout_marginTop = "30dp"
                android:padding="20dp"
                android:background="@color/black"
                android:textColor="@color/white"
                android:text="@string/sortASC" />

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/sortAlphabetDescending"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                android:layout_weight="1"
                android:layout_marginTop = "30dp"
                android:padding="20dp"
                android:background="@color/black"
                android:textColor="@color/white"
                android:text="@string/sortDESC" />

                <androidx.appcompat.widget.AppCompatButton
                    android:id="@+id/sortNumberAscending"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toTopOf="parent"
                    android:layout_weight="1"
                    android:layout_marginTop = "30dp"
                    android:padding="20dp"
                    android:background="@color/black"
                    android:textColor="@color/white"
                    android:text="@string/sortNumberASC" />

                <androidx.appcompat.widget.AppCompatButton
                    android:id="@+id/sortNumberDescending"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintTop_toTopOf="parent"
                    android:layout_weight="1"
                    android:layout_marginTop = "30dp"
                    android:padding="20dp"
                    android:background="@color/black"
                    android:textColor="@color/white"
                    android:text="@string/sortNumberDESC" />


            </LinearLayout>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/exchangeRateRV"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                android:layout_marginTop="90dp"
                app:layout_constraintTop_toBottomOf="@id/spinner"/>

        </androidx.constraintlayout.widget.ConstraintLayout>

    </FrameLayout>

</layout>

方法onCreateView:

    private var binding: FragmentExchangeRateBinding? = null
    private var exchangeRateAdapter : ExchangeRateAdapter? = null
    private val exchangeRateViewModel : ExchangeRateViewModel? by viewModel()
    private val favouriteViewModel: FavouriteViewModel by viewModel()
    private var spinner : Spinner? = null

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

        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_exchange_rate, container, false)

        initRecyclerExchangeRate()
        loadExchangeRate()

        binding?.sortAlphabetAscending?.setOnClickListener {

            exchangeRateViewModel?.getSortCurrencyAlphabetAscending?.observe(
                viewLifecycleOwner, Observer {
                    exchangeRateAdapter?.setList(it)
                    exchangeRateAdapter?.notifyDataSetChanged()
                }
            )
        }

        binding?.sortAlphabetDescending?.setOnClickListener {

            exchangeRateViewModel?.getSortCurrencyAlphabetDescending?.observe(
                viewLifecycleOwner, Observer {
                    exchangeRateAdapter?.setList(it)
                    exchangeRateAdapter?.notifyDataSetChanged()
                }
            )

        }

        binding?.sortNumberAscending?.setOnClickListener {

            exchangeRateViewModel?.getSortCurrencyNumberAscending?.observe(
                viewLifecycleOwner, Observer {
                    exchangeRateAdapter?.setList(it)
                    exchangeRateAdapter?.notifyDataSetChanged()
                }
            )

        }

        binding?.sortNumberDescending?.setOnClickListener {

            exchangeRateViewModel?.getSortCurrencyNumberDescending?.observe(
                viewLifecycleOwner, Observer {
                    exchangeRateAdapter?.setList(it)
                    exchangeRateAdapter?.notifyDataSetChanged()
                }
            )

        }

        val array = arrayOf("Option 1", "Option 2", "Option 3")

        val rootView = inflater.inflate(R.layout.fragment_exchange_rate, container, false)
        spinner = rootView.findViewById<Spinner>(R.id.spinner)

      //  spinner = view?.findViewById<Spinner>(R.id.spinner)
        
        spinner?.adapter =  ArrayAdapter<String>(requireContext(), android.R.layout.simple_list_item_1, array)
        
       // spinner?.adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

/*        ArrayAdapter.createFromResource(
            activity?.applicationContext!!,
            R.array.currency_array,
            android.R.layout.simple_spinner_item
        ).also { adapter ->
            // Specify the layout to use when the list of choices appears
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            // Apply the adapter to the spinner
            spinner?.adapter = adapter
        }*/

        spinner?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                //  result?.text = array.get(p2)

                when(p2) {
                   // 0 -> result?.text = array.get(0)
                  //  1 -> result?.text = array.get(1)
                  //  2 -> result?.text = array.get(2)
                }
            }


            override fun onNothingSelected(p0: AdapterView<*>?) {
                // result?.text = array.get(0)
            }

        }

        return binding?.root
    }
android
  • 1 1 个回答
  • 19 Views

1 个回答

  • Voted
  1. Best Answer
    Andrew
    2022-08-30T20:45:00Z2022-08-30T20:45:00Z

    构造函数参数之一ArrayAdapter是Context:

    public ArrayAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull T[] objects) {
            this(context, resource, 0, Arrays.asList(objects));
        }
    

    你在fragment中只能得到this不满足构造函数要求的fragment本身,试试这个:

     ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item,array)
    

    也就是说,我们将它作为 context 传递requireContext(),或者你可以简单地尝试,context但我认为你会被提议用一个新的来修复它requireContext()。你也可以用this.requireContext().

    UPD

    尝试在适配器声明后添加:

    spinner?.adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    

    要初始化小部件,您需要执行以下操作:

     override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            val rootView = inflater.inflate(R.layout.your_fragment, container, false)
            spinner = rootView.findViewById<Spinner>(R.id.spinner)
    
    
    val adapter = ArrayAdapter(...)
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner?.adapter = adapter
    
    • 0

相关问题

  • 来自片段的列表落后于 BottomNavigationView

  • 无法将变量从 Activity 传递到 Fragment

  • 构建与完成的片段略有不同的片段的最佳方法是什么?

  • 如何更改来自服务器的响应中的日期格式?

  • 谷歌地图在应用程序的发布版本中不起作用

  • 材料设计按钮。单击按钮上的可选区域!

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5