首页 > 解决方案 > 无法获取要在 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)

标签: androidkotlin

解决方案


你能告诉你到底遇到了什么问题吗?

也尝试更改为以下:

在 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 响应以及问题的确切原因


推荐阅读