【问题标题】:Error inflating android.support.v7.widget.CardView膨胀 android.support.v7.widget.CardView 时出错
【发布时间】:2020-04-22 15:18:40
【问题描述】:

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

错误提示未找到 CardView,但未找到下载选项。)

这是出现错误的活动的代码。

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>

联系班级

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])
}

【问题讨论】:

  • 在第一个屏幕截图中,您似乎尝试在项目级别 build.gradle 中添加 cardview 依赖项。它应该进入app/build.gradle
  • 由于我在此评论之后更改了问题,因此我想澄清一下,我已将该行剪切并粘贴到 app/build.gradle 中,并且错误仍然存​​在,就好像没有任何改变一样。虽然现在构建成功了。

标签: java android kotlin android-cardview


【解决方案1】:

首先添加setContentView();

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

使用精确版本App Level 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 将原始支持库 API 替换为 androidx 命名空间中的包。阅读有关AndroidX Overview 的官方指南。

您的 Cardviewrecyclerview

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

【讨论】:

  • 谢谢,但现在错误变为“无法充气 android.support.v7.widget.CardView”。如果我按照您所说的任何内容构建一个新项目,这种情况会消失吗?
  • @VivekYadav 您应该添加应用级别的 build.gradle 部分。下dependencies
  • 这样做了,构建成功。错误仍然存​​在。
  • @VivekYadav 你在onCreate 中声明了 RecyclerView 吗?
  • 我没有在里面声明,我只是直接用了synthetic.main这个东西
【解决方案2】:

好的,在聊天中 @IntellijAmiya 的帮助下,我认为这基本上是因为我应该在 app/build.gradle 中使用 androidX 替代品时使用了“android.support.v7.widget.CardView”。此外,在设计卡片的 XML 文件中,我没有使用 androidX 替代方案。这样做修复了它。

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多