android - 无法获取要在 android kotlin 中加载的列表
问题描述
我在尝试加载列表视图时遇到问题。这是我用来加载列表视图的示例代码。SearchFragment 调用适配器来加载数据。MainActivity 调用 SearchFragment。该列表不会填充数据。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraintLayout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<TextView
android:id="@+id/main_text"
android:textSize="42sp"
android:layout_margin="5sp"
android:textAlignment="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/my_toolbar"/>-->
<FrameLayout
android:id="@+id/details_fragment"
android:name="fragments.SearchFragment"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal"/>
</LinearLayout>
row_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/icon"
android:layout_width="100px"
android:layout_height="100px"
android:layout_marginLeft="4px"
android:layout_marginRight="10px"
android:layout_marginTop="4px"
android:src="@android:drawable/ic_dialog_info" >
</ImageView>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@+id/label" >
</TextView>
</LinearLayout>
search_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/search_view"
android:queryHint="Search here"
android:layout_marginTop="8dp"/>
<ListView
android:id="@+id/recipe_list_view"
android:layout_width="match_parent"
android:background="@android:color/holo_blue_bright"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
/>
</LinearLayout>
MainActivity.kt
package sample
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.FragmentTransaction
import android.view.Menu
import android.view.MenuItem
import android.widget.TextView
import fragments.SearchFragment
actual class Sample {
actual fun checkMe() = 44
}
actual object Platform {
actual val name: String = "Android"
}
class MainActivity : AppCompatActivity() {
lateinit var searchFragment: SearchFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//findViewById<TextView>(R.id.main_text).text = hello()
//setSupportActionBar(findViewById(R.id.my_toolbar))
this.searchFragment = SearchFragment()
supportFragmentManager.beginTransaction()
.replace(R.id.details_fragment, searchFragment)
.addToBackStack(searchFragment.toString())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.action_settings -> {
// User chose the "Settings" item, show the app settings UI...
true
}
else -> {
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
super.onOptionsItemSelected(item)
}
}
}
搜索片段.kt
package fragments
import adaptors.SearchAdaptor
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.AdapterView
import android.widget.ListView
import android.widget.SearchView
import objects.Search
import sample.R
class SearchFragment : SearchView.OnQueryTextListener, AdapterView.OnItemClickListener, Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater?.inflate(R.layout.searchlayout,
container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val search = Search("yer", "50")
val search1 = Search("ter", "60")
val search2 = Search("yer", "50")
val search3 = Search("ter", "60")
val search4= Search("yer", "50")
val search5 = Search("ter", "60")
val list = arrayListOf(search, search1, search2, search3, search4, search5)
val adaptor = SearchAdaptor(activity, R.layout.rowlayout, list)
val listView: ListView = view.findViewById(R.id.recipe_list_view)
listView.adapter = adaptor
}
override fun onQueryTextSubmit(query: String?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onQueryTextChange(newText: String?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
搜索适配器.kt
package adaptors
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import objects.Search
import sample.R
class SearchAdaptor(context: Context?, resource: Int, list: ArrayList<Search>) : ArrayAdapter<Search>(context, resource, list)
{
var resource: Int
var list: ArrayList<Search>
init {
this.resource = resource
this.list = list
}
override fun getCount(): Int {
return this.list.size;
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? {
var holder: ViewHolder
var retView: View
if(convertView == null){
val inflater = LayoutInflater.from(context)
retView = inflater.inflate(R.layout.rowlayout, parent, false)
holder = ViewHolder()
holder.image = retView.findViewById(R.id.icon) as ImageView?
holder.text = retView.findViewById(R.id.label) as TextView?
retView.tag = holder
} else {
holder = convertView.tag as ViewHolder
retView = convertView
}
val attraction = getItem(position)
holder.text!!.text = attraction.cost
return retView
}
internal class ViewHolder {
var image: ImageView? = null
var text: TextView? = null
}
}
这是 Logcat 的详细信息
2019-08-06 13:25:37.831 2895-2895/? W/zygote: Unexpected CPU variant for X86 using defaults: x86
2019-08-06 13:25:38.015 2895-2895/org.jetbrains.kotlin.mpp_app_android W/ActivityThread: Application org.jetbrains.kotlin.mpp_app_android is waiting for the debugger on port 8100...
2019-08-06 13:25:38.024 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: Sending WAIT chunk
2019-08-06 13:25:39.072 2895-2904/org.jetbrains.kotlin.mpp_app_android I/zygote: Debugger is active
2019-08-06 13:25:39.232 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: Debugger has connected
2019-08-06 13:25:39.232 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:39.433 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:39.635 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:39.835 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:40.043 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:40.244 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:40.444 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:40.646 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:40.847 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: waiting for debugger to settle...
2019-08-06 13:25:41.048 2895-2895/org.jetbrains.kotlin.mpp_app_android I/System.out: debugger has settled (1440)
2019-08-06 13:25:41.398 2895-2895/org.jetbrains.kotlin.mpp_app_android I/InstantRun: starting instant run server: is main process
2019-08-06 13:26:14.310 2895-3980/org.jetbrains.kotlin.mpp_app_android D/OpenGLRenderer: HWUI GL Pipeline
2019-08-06 13:26:14.339 2895-3980/org.jetbrains.kotlin.mpp_app_android I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2019-08-06 13:26:14.340 2895-3980/org.jetbrains.kotlin.mpp_app_android I/OpenGLRenderer: Initialized EGL, version 1.4
2019-08-06 13:26:14.340 2895-3980/org.jetbrains.kotlin.mpp_app_android D/OpenGLRenderer: Swap behavior 1
2019-08-06 13:26:14.340 2895-3980/org.jetbrains.kotlin.mpp_app_android W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2019-08-06 13:26:14.340 2895-3980/org.jetbrains.kotlin.mpp_app_android D/OpenGLRenderer: Swap behavior 0
2019-08-06 13:26:14.351 2895-3980/org.jetbrains.kotlin.mpp_app_android D/EGL_emulation: eglCreateContext: 0xea3052a0: maj 3 min 0 rcv 3
2019-08-06 13:26:14.359 2895-3980/org.jetbrains.kotlin.mpp_app_android D/EGL_emulation: eglMakeCurrent: 0xea3052a0: ver 3 0 (tinfo 0xea3033e0)
2019-08-06 13:26:17.305 2895-2895/org.jetbrains.kotlin.mpp_app_android I/Choreographer: Skipped 178 frames! The application may be doing too much work on its main thread.
2019-08-06 13:26:17.322 2895-3980/org.jetbrains.kotlin.mpp_app_android D/EGL_emulation: eglMakeCurrent: 0xea3052a0: ver 3 0 (tinfo 0xea3033e0)
解决方案
你能告诉你到底遇到了什么问题吗?
也尝试更改为以下:
在 row_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
在 search_layout.xml
<ListView
android:id="@+id/recipe_list_view"
android:layout_width="match_parent"
android:background="@android:color/holo_blue_bright"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
/>
还发布您的 logcat 响应以及问题的确切原因
推荐阅读
- go - 两种不同语言之间的协议缓冲区
- android - 带房间的 AutocompleteTextView
- qt - qml相机以不同的分辨率保存相同的图像
- react-native - 提供给 SecureStore 的值无效。值必须是字符串;如果它们是可序列化的,请考虑对您的值进行 JSON 编码
- flutter - 不同页面上的 Texfield 触发 StreamBuilder
- file-upload - extjs 文件上传按钮对齐方式更改
- c# - 将 DataGrid 绑定到 ObservableCollection
> - python - 根据 .csv 文件中给出的日期列创建列
- vue.js - 如何在 vuepress 中使用 jsx?
- sql - JPA标准api是否有JOIN和IN问题?