![](/img/trans.png)
[英]How to implement a dynamic list view inside fragment android studio in Kotlin
[英]How to implement list view inside fragment android studio Kotlin
如何在片段 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>
我測試過,效果很好。 這是我的代碼:
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()
}
}
活動_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>
片段.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>
片段.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>
正如文檔所說:
注意:為了在您的列表中獲得更好的性能,您應該使用 RecyclerView 構建您的列表。
此外,您可以在官方文檔中找到這兩種實現的完整示例。 請參閱: ListView 文檔、 RecyclerView 文檔
編輯:+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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.