当前位置: 首页 > 知识库问答 >
问题:

无法解析'ConstraintLayout'中的方法'setAdapter'

金承嗣
2023-03-14

我是android开发的新手,正在尝试将recycler视图与setAdapter绑定,但遇到了以下错误“无法解析'ConstraintLayout'中的方法'setAdapter'”

我的主要活动。java代码是:

我的主要目标是使用ActivityMainBinding将recyclerView与setAdapter绑定

package com.example.baatcheet;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.example.baatcheet.usersAdapter.*;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.example.baatcheet.databinding.ActivityMainBinding;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

   ActivityMainBinding binding;
   FirebaseDatabase database;
   ArrayList<User> users;
   usersAdapter UserAdapter;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       binding = ActivityMainBinding.inflate(getLayoutInflater());
       
       setContentView(binding.getRoot());
       database = FirebaseDatabase.getInstance();
       users = new ArrayList<>();
       UserAdapter = new usersAdapter(this, users);
       binding.recyclerView.setAdapter(UserAdapter);



       database.getReference().child("users").addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange(@NonNull DataSnapshot snapshot) {
               users.clear();
               for(DataSnapshot snapshot1 : snapshot.getChildren()){
                   User user = snapshot1.getValue(User.class);
                   users.add(user);
               }
               UserAdapter.notifyDataSetChanged();
           }

           @Override
           public void onCancelled(@NonNull DatabaseError error) {

           }
       });




   }

   @Override
   public boolean onOptionsItemSelected(@NonNull MenuItem item) {
       switch (item.getItemId()){
           case R.id.search:
               Toast.makeText(this,"Search Clicked" , Toast.LENGTH_SHORT).show();
               break;
           case R.id.settings:
               Toast.makeText(this , " setting Clicked" , Toast.LENGTH_SHORT).show();
               break;

       }
       return super.onOptionsItemSelected(item);
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       getMenuInflater().inflate(R.menu.top_menu,menu);
       return super.onCreateOptionsMenu(menu);
   }
}


这就是我出错的地方-

它告诉我重命名引用,这到底意味着什么?

这项活动很重要。xml文件是:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:elevation="30dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/menu">

    </com.google.android.material.bottomnavigation.BottomNavigationView>

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:listitem="@layout/row_conversation"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

用户。java代码是:

package com.example.baatcheet;

public class User {
    private String uid,name,phoneNumber,profileImage;
    public User(){

    }


    public User(String uid, String name, String phoneNumber, String profileImage) {
        this.uid = uid;
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.profileImage = profileImage;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public void setProfileImage(String profileImage) {
        this.profileImage = profileImage;
    }

    public String getUid() {
        return uid;
    }

    public String getName() {
        return name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public String getProfileImage() {
        return profileImage;
    }
}

用户适配器。java代码是:

package com.example.baatcheet;

import android.content.Context;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.baatcheet.databinding.RowConversationBinding;

import java.util.ArrayList;

public class usersAdapter extends RecyclerView.Adapter<usersAdapter.UsersViewHolder>{
    Context context;
    ArrayList<User> users;
    public  usersAdapter(Context context , ArrayList<User> users){
        this.context = context;
        this.users = users;
    }
    {

    }
    @NonNull
    @Override
    public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.row_conversation,parent,false);
        return new UsersViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull UsersViewHolder holder, int position) {

        User user = users.get(position);

        holder.binding.userName.setText(user.getName());
    }

    @Override
    public int getItemCount() {
        return users.size();
    }

    public class UsersViewHolder extends RecyclerView.ViewHolder{

        RowConversationBinding binding;
        public UsersViewHolder(@NonNull View itemView) {
            super(itemView);
            binding = RowConversationBinding.bind(itemView);
        }
    }
}

共有1个答案

谢和颂
2023-03-14

在布局文件中,根ConstraintLayout具有@id/recyclerViewid:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    ... />

您应该将此id移动到RecyclerView本身:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    ... />

一旦你这么做了,binding。recyclerView将引用recyclerView而不是ConstraintLayout

如果您出于其他原因需要通过视图绑定访问ConstraintLayout,您可以使用binding.root

 类似资料:
  • 我有一个java项目,我正在使用Allure生成测试报告。我发现了这个问题,需要使用以下代码重命名我的测试: 我已经从下面导入了Allure生命周期: 并使用以下依赖项: 但是,这句话很有诱惑力。getLifecycle()它正在抱怨无法解析“Allure”中的方法“getLifecycle”。 如何修复错误?

  • 我正在通过Android Studio中的一个应用程序工作,该应用程序使用学校意图传递数据。我已经创建了传递数据的对象,并启动了,但是我不断收到一个警告,说我的方法无法解析。有什么想法吗?提前谢了。

  • 正如文件所述: Android O允许您通过在res/字体/文件夹中添加字体文件来捆绑字体作为资源。 结果: 您可以使用getFont(int)方法检索字体,其中需要传递要检索的字体的资源标识符。此方法返回Typeface对象。这将对字体的第一个重量或样式变体(如果是字体系列)进行编码。然后可以使用字体。create(typeface,style)方法来检索特定样式。 注意:TextView已经为

  • > 在菜单项和添加导航头之间导航的代码由一个方法组成。 由于作者没有提到在哪里粘贴这段代码,我粘贴在我的文件中 在菜单项之间导航和添加导航标题之间的代码是否由我粘贴在正确的位置? 在方法selectDrawerItem(MenuItem MenuItem)中有一条注释,创建一个新片段,并根据位置指定要显示的行星,作者是否希望我在这里添加一些内容。

  • 我正在尝试构建一个java。net应用程序,其中客户端和服务器必须通过串行收集类型(如字节[])相互发送数据。 由于未知原因,我的DataInputStream无法解析方法readAllBytes()。 一个朋友把它扔进了IDE,它没有抱怨。我不确定这怎么会是一个版本问题,但我检查了一下,并没有误解我的项目。我正在使用Java 8。 实际上,我确信应该支持这个方法,但我不明白为什么不支持,因为它是

  • 我希望使用getter获取数据库的值。首先,我创建了user.java: 那么我已经创建了userRepository.java: 这是我尝试获取值的服务: 但我得到的错误是无法解析“optional”中的方法“get name”。为什么?