Android Studio Kotlin应用程序“保持停止”当我运行它

发布于 2025-01-29 07:04:42 字数 1586 浏览 3 评论 0原文

我只是想设置一个配置为下拉菜单的旋转器,但是我什至无法测试我的应用程序以查看它是否有效,因为每次运行时,它都会立即崩溃。我知道我的问题与mainActivity.kt文件中第21行的无效对象引用有关。这是问题代码: Val Spinner:Spinner = FindViewById< Spinner>(r.id.locations) Spinner 的ID是位置,因此我不确定为什么它会以空值返回。 这也是该文件的完整代码:


import android.app.Activity
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Spinner
import android.widget.ArrayAdapter
import android.widget.AdapterView

private var userLocation: Any = ""
private var userDestination: Any = ""


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

    val spinner: Spinner = findViewById<Spinner>(R.id.locations)
    val locationsAdapter: ArrayAdapter<CharSequence> = ArrayAdapter.createFromResource(
        this,
        R.array.rooms,
        android.R.layout.simple_spinner_item
    ).also { adapter ->
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter
    }
}

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id:Long) {
        userLocation = parent.getItemAtPosition(pos)
        val spinner: Spinner = findViewById(R.id.locations)
        spinner.onItemSelectedListener = this
    }
    override fun onNothingSelected(parent: AdapterView<*>) = Unit
}

I am just trying to set up a spinner configured as a dropdown menu, but I can't even test my app to see if it works because every time I run it, it immediately crashes. I know that my issue is related to a null object reference at line 21 in my MainActivity.kt file. Here is the problem code:
val spinner: Spinner = findViewById<Spinner>(R.id.locations)
The id of the spinner is locations, so I'm not sure why this is coming back as a null value.
Here is also the full code for the file:


import android.app.Activity
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Spinner
import android.widget.ArrayAdapter
import android.widget.AdapterView

private var userLocation: Any = ""
private var userDestination: Any = ""


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

    val spinner: Spinner = findViewById<Spinner>(R.id.locations)
    val locationsAdapter: ArrayAdapter<CharSequence> = ArrayAdapter.createFromResource(
        this,
        R.array.rooms,
        android.R.layout.simple_spinner_item
    ).also { adapter ->
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter
    }
}

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id:Long) {
        userLocation = parent.getItemAtPosition(pos)
        val spinner: Spinner = findViewById(R.id.locations)
        spinner.onItemSelectedListener = this
    }
    override fun onNothingSelected(parent: AdapterView<*>) = Unit
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

書生途 2025-02-05 07:04:42

声明Spinner全局用于主动脉:

private lateinit var spinner: Spinner

在启动旋转器并设置其适配器的方法上,我建议您设置数组适配器如下:

spinner = findViewById<Spinner>(R.id.locations)

spinner.adapter = ArrayAdapter(this, R.layout.drop_down_generic_item, resources.getStringArray(R.array.rooms))

我真的不理解您在问题中显示的旋转性,对不起。但是在MainActivity中,您可以将Spinner.OniTemSelectedLister()设置为:

spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(adapterView: AdapterView<*>?, view: View?, position: Int, p3: Long) {
                val selectedRoom = adapterView?.getItemAtPosition(position)
            }

            override fun onNothingSelected(p0: AdapterView<*>?) {
                
            }
}

我不想让您混淆,但要看一下带有autoCompleteTeTextView的TextInputlayout,就像提示一样。 :d

Declare spinner global for MainActivity:

private lateinit var spinner: Spinner

On the method onCreate initialise the spinner and set its adapter, I would recommend you to set the array adapter as follows:

spinner = findViewById<Spinner>(R.id.locations)

spinner.adapter = ArrayAdapter(this, R.layout.drop_down_generic_item, resources.getStringArray(R.array.rooms))

I don't really understand the SpinnerActivity you showed in the question, sorry. But in MainActivity you can set the spinner.onItemSelectedLister() as follows:

spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(adapterView: AdapterView<*>?, view: View?, position: Int, p3: Long) {
                val selectedRoom = adapterView?.getItemAtPosition(position)
            }

            override fun onNothingSelected(p0: AdapterView<*>?) {
                
            }
}

I don't want to confuse you, but have a look at a TextInputLayout with an AutoCompleteTextView, just as a hint. :D

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文