java - 膨胀 android.support.v7.widget.CardView 时出错

标签 java android kotlin android-cardview

在深入研究代码之前,我确实想提一下 Android Studio 说找不到以下类:android.support.v7.widget.CardView ,即使我已经下载了它。(下面的图片)

(错误提示未找到 CardView,但未找到下载选项。) Error saying CardView not found, though no download option is found.

这是出现错误的 Activity 的代码。

ContactsActivity.kt

(contactView是RecyclerView)

package com.smartherd.msgshareapp

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.smartherd.msgshareapp.models.Contact
import com.smartherd.msgshareapp.models.adapters.ContactAdapter
import kotlinx.android.synthetic.main.activity_contacts.*

class ContactsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val layoutManager = LinearLayoutManager(this)
        layoutManager.orientation = LinearLayoutManager.VERTICAL

        contactsView.layoutManager = layoutManager  // Oops! contactsView is NULL!

        contactsView.adapter = ContactAdapter(this, Contact.allContacts)
    }
}

这是activity_contact.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:baselineAligned="false"
    android:orientation="vertical"
    android:padding="10dp">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/contactsView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical" />
</LinearLayout>

联系类(class)

package com.smartherd.msgshareapp.models

import org.json.JSONArray
import org.json.JSONObject
import java.io.File

data class Contact(val name: String, val phone: String, val email: String) {
    companion object {

       val allContacts: List<Contact>
        get() {
            val json = JSONObject(File("contacts.json").readText()).getJSONArray("contacts")
            // Looks like {"contacts": [{"name": ..., "email": ..., "phone": ...}, ...]}

            val contacts = mutableListOf<Contact>()

            var i = 0

            while (i < json.length()) {
                val name = json.getJSONObject(i).getString("name")
                val phone = json.getJSONObject(i).getString("phone")
                val email = json.getJSONObject(i).getString("email")

                contacts.add(Contact(name, phone, email))

                ++i
            }

            return contacts
        }

    }
}

以及ContactAdapter类(ContactAdapter.kt)

package com.smartherd.msgshareapp.models.adapters

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.smartherd.msgshareapp.R
import com.smartherd.msgshareapp.models.Contact
import kotlinx.android.synthetic.main.card_contact.view.*

class ContactAdapter(val context: Context, val contacts: List<Contact>) :
    RecyclerView.Adapter<ContactAdapter.ContactHolder>() {

    inner class ContactHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        fun initialize(contact: Contact) {
            itemView.contactName.text = "${contact.name}\n${contact.email}"
            // itemView.contactImage is not set yet.
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactHolder =
        ContactHolder(
            LayoutInflater.from(context).inflate(R.layout.card_contact, parent, false)
        )

    override fun getItemCount(): Int = contacts.size

    override fun onBindViewHolder(holder: ContactHolder, position: Int) = holder.initialize(contacts[position])
}

最佳答案

首先添加setContentView();

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main) //missing
    val recyclerView = findViewById(R.id.contactsView) as RecyclerView

使用精确版本应用程序级别 build.gradle

 dependencies {

       implementation 'com.android.support:cardview-v7:28.0.0'
       implementation 'com.android.support:recyclerview-v7:28.0.0'
      }

仅供引用

您使用的是非常旧的版本。如果您想使用最新版本,那么库将无法工作,除非您在应用程序中进行以下更改:

  • 将compileSdkVersion升级到28或更高版本。
  • 更新您的应用以使用 Jetpack (AndroidX)。

AndroidX 用 androidx 命名空间中的包替换了原来的支持库 API。阅读有关 AndroidX Overview 的官方指南.

您的Cardviewrecyclerview

 implementation 'androidx.cardview:cardview:1.0.0'
 implementation 'androidx.recyclerview:recyclerview:1.1.0'

关于java - 膨胀 android.support.v7.widget.CardView 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61368711/

相关文章:

java - 创建以下 for 循环是否不利于垃圾收集?

java - Android 蓝牙应用程序在启动时崩溃

kotlin - 如何将分机转为成员(member)?

multithreading - 同步注释在 Kotlin 中不起作用

android - 错误 : onActivityResult overrides nothing

java - EpochX框架中的BNF递归

java - 从文件数据中提取特定段落的最佳方法

android - 来自 Android 设备的 SPARQL 查询

android - monkeyrunner.press 的第三个参数是什么

android - (Cocos2dx-v3) Android - 如何解决 "cocos2d.h: No such file or directory"?