如何在 fragment android studio Kotlin 中实现列表视图

How to implement list view inside fragment android studio Kotlin

如何在 fragment 中实现列表视图 android studio Kotlin 我是编程新手,我想让我的应用程序成为按地区显示地名的简单列表视图。

这是片段名称 VisayasMindanao

package com.gumangan.uecficenterslist
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView


class VisayasMindanao : Fragment(){

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

val centerlist = resources.getStringArray(R.array.region2)

//Creating Array of Region 
var lv = findViewById(R.id.content_main_lview) as ListView 
val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, centerlist)
lv.adapter = adapter

    return LayoutInflater.from(container?.context).inflate(R.layout.visayas_mindanao, container, false)
}

}

这是我的布局名称visayas_mindanao

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
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">


<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/visayas_mindanao_lview"/>

</android.support.constraint.ConstraintLayout>

我正在尝试从这里获取值

<resources>
<string name="region1">
    <item>ARANAAR TI BAGGAK TI DAYA
    acarra, Ilocos Norte
    </item>
</string>
</resources>

既然你说你是新来的。在我所知道的许多语言中,return 语句之后的代码永远不会是 运行.

做这样的事情

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return LayoutInflater.from(container?.context).inflate(R.layout.visayas_mindanao, container, false)
}

override fun onViewCreated(){
 val lv = findViewById(R.id.visayas_mindanao_lview) as ListView
    val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1,listOf("car", "plane"))
    lv.adapter = adapter
}

如果您阅读资源,请执行此操作

override fun onViewCreated(){
     val lv = findViewById(R.id.visayas_mindanao_lview) as ListView
        val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, resources.getStringArray(// the resource ID of the array))
        lv.adapter = adapter
    }

确保您的资源与@nitinkumarp 所说的一致。

如果这对您有用,请将其作为答案。帮助其他初学者。谢谢

您的字符串数组资源格式不正确。 按以下格式添加:

<string-array name="sample_region1">
    <item>ACAYA
Nalasin, Solsona, Ilocos Norte</item>
    <item>ALPHA KEN OMEGA
Imelda Marcos, Ilocos Norte</item>

</string-array>

如文档所述:

Note: For better performance in your list, you should instead build your list with RecyclerView.

此外,您可以在官方文档中找到这两种实现的完整示例。看: ListView documentation, RecyclerView documentation

编辑:+1 用于将代码 移动到 return 语句上方,否则将不会执行。

你的代码有两个问题:

第一个:

覆盖应该有结束点“}”,并在最后一个“}”之后删除另一个。

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return LayoutInflater.from(container?.context).inflate(R.layout.visayas_mindanao, container, false)

}

第二个:

另一个问题是您对 StringArrays 的声明,它应该是这样的:

<string-array name="sample_region1">
        <item>
    Your first item
        </item>
         <item>
    Your Second item
        </item>
    ...
    ..
    .
</string-array>

当然还有设置列表:

val centerlist = resources.getStringArray(R.array.sample_region1)

编辑: 您的 ListView id 是 visayas_mindanao_lview 但在 java 中它是: content_main_lview 刚刚在 java 中设置:

class VisayasMindanao : Fragment() {

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

        val view: View = inflater.inflate(R.layout.visayas_mindanao, container, false)

        val centerlist = resources.getStringArray(R.array.region2)
        var lv = view.findViewById<ListView>(R.id.visayas_mindanao_lview)

        val adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1, centerlist)
        lv.adapter = adapter

        return view
    }
}

我测试过,效果很好。这是我的代码:

MainActivity(有frameLayout)

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment

class MainActivity : AppCompatActivity() {

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

        setFragment(FirstFragment())
    }

    fun setFragment(f: Fragment) {

        val ft = supportFragmentManager.beginTransaction()

        ft.replace(R.id.framelayout, f)
        ft.commit()
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".FirstFragment">


    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/visayas_mindanao_lview"/>

</androidx.constraintlayout.widget.ConstraintLayout>

fragment.kt


import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView

/**
 * A simple [Fragment] subclass.
 */
class FirstFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_first, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val context = context as MainActivity
        val centerlist = resources.getStringArray(R.array.region1)

        val lv = context.findViewById(R.id.visayas_mindanao_lview) as ListView
        val adapter = ArrayAdapter(context, android.R.layout.simple_list_item_1, centerlist)
        lv.adapter = adapter
    }
}

值:strings.xml

<resources>
    <string-array name="region1">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
        <item>item4</item>
        <item>item5</item>
        <item>item6</item>
    </string-array>
</resources>