膨胀 android.support.v7.widget.CardView 时出错
Error inflating android.support.v7.widget.CardView
在深入研究代码之前,我想提一下 Android Studio 说 找不到以下 class:android.support.v7.widget.CardView,虽然我下载了。(下图)
(错误提示未找到 CardView,但未找到下载选项。)
这是 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
}
}
}
和接触适配器class (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
使用精确版本 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
.
的官方指南
你的Cardview
&recyclerview
将
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
好的,在聊天中@IntellijAmiya 的帮助下,我认为这基本上是因为我在 app/build.gradle 中应该使用 androidX 替代方案时使用了 "android.support.v7.widget.CardView" .另外,在设计卡片的 XML 文件中,我没有使用 androidX 替代方案。这样做修复了它。
在深入研究代码之前,我想提一下 Android Studio 说 找不到以下 class:android.support.v7.widget.CardView,虽然我下载了。(下图)
(错误提示未找到 CardView,但未找到下载选项。)
这是 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
}
}
}
和接触适配器class (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
使用精确版本 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
.
你的Cardview
&recyclerview
将
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
好的,在聊天中@IntellijAmiya 的帮助下,我认为这基本上是因为我在 app/build.gradle 中应该使用 androidX 替代方案时使用了 "android.support.v7.widget.CardView" .另外,在设计卡片的 XML 文件中,我没有使用 androidX 替代方案。这样做修复了它。