Android 回收视图 "cannot find symbol variable"
Android RecyclerView "cannot find symbol variable"
我的问题是我正在编写一个程序,该程序在 2 个不同的活动中包含 2 个 RecyclerView。第一个就像一个魅力。一点烦恼都没有。另一方面,第二个不起作用。应该是完全一样的情况,我在做完全一样的事情,就是无法摆脱错误。
现在,我将只提供我的 Activity Class、我的适配器和相应的 XML 文件。
以下方法中的粗体部分也吐出一个 "Cannot resolve symbol" 我猜它与上面的问题有关但是当我尝试 运行 应用程序时只显示上面的错误.
binding.listItem.**setAdapter**(adapter);
binding.listItem.**setLayoutManager**(new LinearLayoutManager(this));
适配器:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {
private List<User> users;
private Context context;
public UserAdapter(List<User> users, Context context) {
this.users = users;
this.context = context;
}
@NonNull
@Override
public UserAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
SubmitListItemBinding binding = DataBindingUtil
.inflate(LayoutInflater.from(viewGroup.getContext()),
R.layout.submit_list_item,
viewGroup,
false);
return new ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
User user = users.get(i);
viewHolder.submitListItemBinding.setUser(user);
}
@Override
public int getItemCount() {
return users.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public SubmitListItemBinding submitListItemBinding;
public ViewHolder(@NonNull SubmitListItemBinding binding) {
super(binding.getRoot());
submitListItemBinding = binding;
}
}
}
Activity:
public class SubmitLayout extends AppCompatActivity {
private UserAdapter adapter;
private SubmitListItemBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_submit_layout_);
Intent intent = getIntent();
String s = intent.getStringExtra("group");
Group group = new Gson().fromJson(s, Group.class);
List<User> users = group.getAllUsers();
binding = DataBindingUtil.setContentView(this, R.layout.submit_list_item);
adapter = new UserAdapter(users, this);
binding.listItem.setAdapter(adapter);
binding.listItem.setLayoutManager(new LinearLayoutManager(this));
}
}
XML Activity 布局:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.hasenbau.gemeinschaftskasse_android.model.User"/>
</data>
<android.support.constraint.ConstraintLayout
android:id="@+id/layoutSubmit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".SubmitLayout">
<android.support.v7.widget.RecyclerView
android:id="@+id/listItem"
android:scrollbars="vertical"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@color/colorAccent"
android:padding="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
最后是 ListItem XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.hasenbau.gemeinschaftskasse_android.model.User"/>
</data>
<LinearLayout
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<TextView
android:id="@+id/whoListItemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
tools:text="Marv"
android:text="@{String.valueOf(user.name)}"
android:textAlignment="center"
android:textColor="@color/Darkblue"
android:textSize="20sp" />
<TextView
android:id="@+id/howMuchListItemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
tools:text="bezahlen"
android:text="bezahlen"
android:textAlignment="center"
android:textColor="@color/Darkblue"
android:textSize="20sp" />
<TextView
android:id="@+id/whatForListItemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
tools:text="100€"
android:text="@{String.valueOf(user.balance)}"
android:textAlignment="center"
android:textColor="@color/Darkblue"
android:textSize="20sp" />
</LinearLayout>
</layout>
更新
在尝试使缓存无效后,我进入了这个 IDE 错误:
java.lang.Throwable
at com.intellij.psi.impl.DebugUtil.startPsiModification(DebugUtil.java:512)
at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:542)
at com.intellij.psi.impl.file.impl.FileManagerImpl.processFileTypesChanged(FileManagerImpl.java:268)
at com.intellij.psi.impl.file.impl.FileManagerImpl.exitDumbMode(FileManagerImpl.java:89)
at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117)
at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:387)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:376)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:364)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:355)
at com.intellij.util.messages.impl.MessageBusImpl.access0(MessageBusImpl.java:43)
at com.intellij.util.messages.impl.MessageBusImpl.invoke(MessageBusImpl.java:208)
at com.sun.proxy.$Proxy51.modificationCountChanged(Unknown Source)
at com.intellij.psi.impl.PsiModificationTrackerImpl.fireEvent(PsiModificationTrackerImpl.java:93)
at com.intellij.psi.impl.PsiModificationTrackerImpl.incCountersInner(PsiModificationTrackerImpl.java:100)
at com.intellij.psi.impl.PsiModificationTrackerImpl.incCounter(PsiModificationTrackerImpl.java:84)
at com.intellij.psi.impl.PsiModificationTrackerImpl.lambda$doIncCounter[=17=](PsiModificationTrackerImpl.java:68)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1010)
at com.intellij.psi.impl.PsiModificationTrackerImpl.doIncCounter(PsiModificationTrackerImpl.java:68)
at com.intellij.psi.impl.PsiModificationTrackerImpl.exitDumbMode(PsiModificationTrackerImpl.java:78)
at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117)
at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:387)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:376)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:364)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:357)
at com.intellij.util.messages.impl.MessageBusImpl.access0(MessageBusImpl.java:43)
at com.intellij.util.messages.impl.MessageBusImpl.invoke(MessageBusImpl.java:208)
at com.sun.proxy.$Proxy92.exitDumbMode(Unknown Source)
at com.intellij.openapi.project.DumbServiceImpl.updateFinished(DumbServiceImpl.java:344)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$pollQueueLater[=17=](TransactionGuardImpl.java:74)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:447)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:431)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:415)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
at java.awt.EventQueue.access0(EventQueue.java:98)
at java.awt.EventQueue.run(EventQueue.java:715)
at java.awt.EventQueue.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:822)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:763)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
SubmitLayout
中的下一行有问题
binding = DataBindingUtil.setContentView(this, R.layout.submit_list_item);
binding.listItem.setAdapter(adapter);
因为 submit_list_item
布局没有 RecyclerView
。你需要activity_submit_layout_
。要修复它,您需要执行后续步骤:
更改 SubmitLayout
中 binding
变量的类型
private SubmitLayoutActivityBinding binding;
正确设置SubmitLayout
onCreate()
中的内容
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_submit_layout_);
...
}
我的问题是我正在编写一个程序,该程序在 2 个不同的活动中包含 2 个 RecyclerView。第一个就像一个魅力。一点烦恼都没有。另一方面,第二个不起作用。应该是完全一样的情况,我在做完全一样的事情,就是无法摆脱错误。
现在,我将只提供我的 Activity Class、我的适配器和相应的 XML 文件。
以下方法中的粗体部分也吐出一个 "Cannot resolve symbol" 我猜它与上面的问题有关但是当我尝试 运行 应用程序时只显示上面的错误.
binding.listItem.**setAdapter**(adapter);
binding.listItem.**setLayoutManager**(new LinearLayoutManager(this));
适配器:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {
private List<User> users;
private Context context;
public UserAdapter(List<User> users, Context context) {
this.users = users;
this.context = context;
}
@NonNull
@Override
public UserAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
SubmitListItemBinding binding = DataBindingUtil
.inflate(LayoutInflater.from(viewGroup.getContext()),
R.layout.submit_list_item,
viewGroup,
false);
return new ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
User user = users.get(i);
viewHolder.submitListItemBinding.setUser(user);
}
@Override
public int getItemCount() {
return users.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public SubmitListItemBinding submitListItemBinding;
public ViewHolder(@NonNull SubmitListItemBinding binding) {
super(binding.getRoot());
submitListItemBinding = binding;
}
}
}
Activity:
public class SubmitLayout extends AppCompatActivity {
private UserAdapter adapter;
private SubmitListItemBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_submit_layout_);
Intent intent = getIntent();
String s = intent.getStringExtra("group");
Group group = new Gson().fromJson(s, Group.class);
List<User> users = group.getAllUsers();
binding = DataBindingUtil.setContentView(this, R.layout.submit_list_item);
adapter = new UserAdapter(users, this);
binding.listItem.setAdapter(adapter);
binding.listItem.setLayoutManager(new LinearLayoutManager(this));
}
}
XML Activity 布局:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.hasenbau.gemeinschaftskasse_android.model.User"/>
</data>
<android.support.constraint.ConstraintLayout
android:id="@+id/layoutSubmit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".SubmitLayout">
<android.support.v7.widget.RecyclerView
android:id="@+id/listItem"
android:scrollbars="vertical"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@color/colorAccent"
android:padding="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
最后是 ListItem XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="user"
type="com.hasenbau.gemeinschaftskasse_android.model.User"/>
</data>
<LinearLayout
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<TextView
android:id="@+id/whoListItemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
tools:text="Marv"
android:text="@{String.valueOf(user.name)}"
android:textAlignment="center"
android:textColor="@color/Darkblue"
android:textSize="20sp" />
<TextView
android:id="@+id/howMuchListItemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
tools:text="bezahlen"
android:text="bezahlen"
android:textAlignment="center"
android:textColor="@color/Darkblue"
android:textSize="20sp" />
<TextView
android:id="@+id/whatForListItemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
tools:text="100€"
android:text="@{String.valueOf(user.balance)}"
android:textAlignment="center"
android:textColor="@color/Darkblue"
android:textSize="20sp" />
</LinearLayout>
</layout>
更新
在尝试使缓存无效后,我进入了这个 IDE 错误:
java.lang.Throwable
at com.intellij.psi.impl.DebugUtil.startPsiModification(DebugUtil.java:512)
at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:542)
at com.intellij.psi.impl.file.impl.FileManagerImpl.processFileTypesChanged(FileManagerImpl.java:268)
at com.intellij.psi.impl.file.impl.FileManagerImpl.exitDumbMode(FileManagerImpl.java:89)
at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117)
at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:387)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:376)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:364)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:355)
at com.intellij.util.messages.impl.MessageBusImpl.access0(MessageBusImpl.java:43)
at com.intellij.util.messages.impl.MessageBusImpl.invoke(MessageBusImpl.java:208)
at com.sun.proxy.$Proxy51.modificationCountChanged(Unknown Source)
at com.intellij.psi.impl.PsiModificationTrackerImpl.fireEvent(PsiModificationTrackerImpl.java:93)
at com.intellij.psi.impl.PsiModificationTrackerImpl.incCountersInner(PsiModificationTrackerImpl.java:100)
at com.intellij.psi.impl.PsiModificationTrackerImpl.incCounter(PsiModificationTrackerImpl.java:84)
at com.intellij.psi.impl.PsiModificationTrackerImpl.lambda$doIncCounter[=17=](PsiModificationTrackerImpl.java:68)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1010)
at com.intellij.psi.impl.PsiModificationTrackerImpl.doIncCounter(PsiModificationTrackerImpl.java:68)
at com.intellij.psi.impl.PsiModificationTrackerImpl.exitDumbMode(PsiModificationTrackerImpl.java:78)
at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117)
at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:426)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:387)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:376)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:364)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:357)
at com.intellij.util.messages.impl.MessageBusImpl.access0(MessageBusImpl.java:43)
at com.intellij.util.messages.impl.MessageBusImpl.invoke(MessageBusImpl.java:208)
at com.sun.proxy.$Proxy92.exitDumbMode(Unknown Source)
at com.intellij.openapi.project.DumbServiceImpl.updateFinished(DumbServiceImpl.java:344)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$pollQueueLater[=17=](TransactionGuardImpl.java:74)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:447)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:431)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:415)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
at java.awt.EventQueue.access0(EventQueue.java:98)
at java.awt.EventQueue.run(EventQueue.java:715)
at java.awt.EventQueue.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:822)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:763)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
SubmitLayout
binding = DataBindingUtil.setContentView(this, R.layout.submit_list_item);
binding.listItem.setAdapter(adapter);
因为 submit_list_item
布局没有 RecyclerView
。你需要activity_submit_layout_
。要修复它,您需要执行后续步骤:
更改
中SubmitLayout
binding
变量的类型private SubmitLayoutActivityBinding binding;
正确设置
SubmitLayout
onCreate()
中的内容@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_submit_layout_); ...
}