繁体   English   中英

Android Studio 中未显示回收站视图

[英]Recycler View not Showing in Android Studio

我正在制作一个带有回收站视图的应用程序。 但我无法在我的应用程序中看到回收站视图。 当我检查 Logcat 时,它显示“E/RecyclerView:未连接适配器; 跳过布局”。 为什么会发生这种情况,我该如何解决?

我的主要活动代码:


import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.widget.Adapter;
import android.widget.Toast;

import com.iammert.library.readablebottombar.ReadableBottomBar;

import java.util.ArrayList;
import java.util.List;

import Adapters.PostAdapter;
import Models.PostsModel;

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    ReadableBottomBar readableBottomBar;
    LinearLayoutManager linearLayoutManager;
    List<PostsModel>postsList;
    PostAdapter post_adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        post_RV_data();
        post_RV_ids();



        setContentView(R.layout.activity_main);
        readableBottomBar = findViewById(R.id.readableBottomBar);
        readableBottomBar.setOnItemSelectListener(new ReadableBottomBar.ItemSelectListener() {
            @Override
            public void onItemSelected(int i) {
                switch (i){
                    case 0:
//                        Toast.makeText(MainActivity.this, "Home", Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
//                        Toast.makeText(MainActivity.this, "Search", Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
//                        Toast.makeText(MainActivity.this, "Video", Toast.LENGTH_SHORT).show();
                        break;
                    case 3:
//                        Toast.makeText(MainActivity.this, "Favourite", Toast.LENGTH_SHORT).show();
                        break;
                    case 4:
//                        Toast.makeText(MainActivity.this, "Profile", Toast.LENGTH_SHORT).show();
                        break;


                }
            }
        });



    }

    private void post_RV_data() {
        postsList = new ArrayList<>();
        postsList.add(new PostsModel(R.drawable.story1,"Angle",R.drawable.ic_baseline_more_vert_24  ,R.drawable.story1,
                R.drawable.ic_baseline_favorite_border_24, "5.9K", R.drawable.ic_baseline_chat_bubble_24, "941",
                R.drawable.ic_baseline_send_24,"312", R.drawable.ic_baseline_bookmark_border_24));
        postsList.add(new PostsModel(R.drawable.story1,"Angle",R.drawable.ic_baseline_more_vert_24  ,R.drawable.story1,
                R.drawable.ic_baseline_favorite_border_24, "5.9K", R.drawable.ic_baseline_chat_bubble_24, "941",
                R.drawable.ic_baseline_send_24,"312", R.drawable.ic_baseline_bookmark_border_24));
        postsList.add(new PostsModel(R.drawable.story1,"Angle",R.drawable.ic_baseline_more_vert_24  ,R.drawable.story1,
                R.drawable.ic_baseline_favorite_border_24, "5.9K", R.drawable.ic_baseline_chat_bubble_24, "941",
                R.drawable.ic_baseline_send_24,"312", R.drawable.ic_baseline_bookmark_border_24));

    }

    private void post_RV_ids() {
        recyclerView = findViewById(R.id.recyclerView);
        linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
        post_adapter = new PostAdapter(postsList);
        recyclerView.setAdapter(post_adapter);
        post_adapter.notifyDataSetChanged();
    }
}

我的 Model 类(PostsModel.java)代码:

//This class is the data source
//This class acts as a structure for holding information of every item in the recycler view
package Models;

public class PostsModel {
    private int profile_pic;
    private String user_name;
    private int more;
    private int post_image;
    private int like;
    private String like_no;
    private int comment;
    private String comment_no;
    private int share;
    private String share_no;
    private int bookmark;

    public PostsModel(int profile_pic, String user_name, int more, int post_image, int like,
                      String like_no, int comment, String comment_no, int share, String share_no, int bookmark){
        this.profile_pic = profile_pic;
        this.user_name = user_name;
        this.more = more;
        this.post_image = post_image;
        this.like = like;
        this.like_no = like_no;
        this.share = share;
        this.share_no = share_no;
        this.comment = comment;
        this.comment_no = comment_no;
        this.bookmark = bookmark;
    }
    //Getters

    //Alt+Insert
    public int getProfile_pic() {
        return profile_pic;
    }

    public int getPost_image() {
        return post_image;
    }

    public int getMore() {
        return more;
    }

    public int getLike() {
        return like;
    }

    public int getComment() {
        return comment;
    }

    public int getShare() {
        return share;
    }

    public int getBookmark() {
        return bookmark;
    }

    public String getUser_name() {
        return user_name;
    }

    public String getLike_no() {
        return like_no;
    }

    public String getComment_no() {
        return comment_no;
    }

    public String getShare_no() {
        return share_no;
    }


}

我的适配器(PostAdapter.java)Class 代码:

//Adapter binds the data from datasource(PostModel) to recyclerview
package Adapters;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

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

import com.smart.instagram.R;

import java.util.List;

import Models.PostsModel;

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> {

    private List<PostsModel> postList;

    public PostAdapter(List<PostsModel>postList){
        this.postList = postList;
    }

    @NonNull
    @Override
    //Implements design of our layout resource file
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.posts_rv, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        int profile_pic = postList.get(position).getProfile_pic();
        int more = postList.get(position).getMore();
        int post_image = postList.get(position).getPost_image();
        int like = postList.get(position).getLike();
        int share = postList.get(position).getShare();
        int comment = postList.get(position).getComment();
        int bookmark = postList.get(position).getBookmark();
        String user_name = postList.get(position).getUser_name();
        String like_no = postList.get(position).getLike_no();
        String share_no = postList.get(position).getShare_no();
        String comment_no = postList.get(position).getComment_no();

        holder.setData(profile_pic, more, post_image, like, share, comment, bookmark,
                user_name, like_no, comment_no, share_no);

    }

    //Helps to bind data from MainActivity to post_rv


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


    public class ViewHolder extends RecyclerView.ViewHolder{
        private ImageView profile_img, post_img, more_img, like_img, comment_img, share_img, bookmark_img;
        private TextView name, like_nos, comment_nos, share_nos;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            profile_img = itemView.findViewById(R.id.profile_pic);
            name = itemView.findViewById(R.id.user_name);
            more_img = itemView.findViewById(R.id.more);
            post_img = itemView.findViewById(R.id.post_image);
            like_img = itemView.findViewById(R.id.like);
            like_nos = itemView.findViewById(R.id.like_no);
            share_img = itemView.findViewById(R.id.share);
            share_nos = itemView.findViewById(R.id.share_no);
            comment_img = itemView.findViewById(R.id.comment);
            comment_nos = itemView.findViewById(R.id.comment_no);
            bookmark_img = itemView.findViewById(R.id.bookmark);

        }

        public void setData(int profile_pic, int more, int post_image, int like, int share, int comment, int bookmark,
                            String user_name, String like_no, String comment_no, String share_no) {
            profile_img.setImageResource(profile_pic);
            more_img.setImageResource(more);
            post_img.setImageResource(post_image);
            like_img.setImageResource(like);
            share_img.setImageResource(share);
            comment_img.setImageResource(comment);
            bookmark_img.setImageResource(bookmark);
            name.setText(user_name);
            like_nos.setText(like_no);
            comment_nos.setText(comment_no);
            share_nos.setText(share_no);
        }
    }


}

试试.inflate(R.layout.posts_rv, false); 在 onCreateViewHolder() 中还要确保你的布局看起来像这样

<android.support.v7.widget.RecyclerView android:id="@+id/RecyclerView" android:layout_width="match_parent" android:layout_height="match_parent" />

声明post_RV_ids(); post_RV_data(); 并在post_RV_data(); 方法

    public class MainActivity extends AppCompatActivity {
        RecyclerView recyclerView;
        ReadableBottomBar readableBottomBar;
        LinearLayoutManager linearLayoutManager;
        List<PostsModel>postsList;
        PostAdapter post_adapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getSupportActionBar().hide();
            post_RV_ids(); // swapped to top
            post_RV_data();
    
    
            // remove this line. you have already declared it.... 
            setContentView(R.layout.activity_main);
           
        }
    
        private void post_RV_data() {
            postsList = new ArrayList<>();
            postsList.add(new PostsModel(R.drawable.story1,"Angle",R.drawable.ic_baseline_more_vert_24  ,R.drawable.story1,
                    R.drawable.ic_baseline_favorite_border_24, "5.9K", R.drawable.ic_baseline_chat_bubble_24, "941",
                    R.drawable.ic_baseline_send_24,"312", R.drawable.ic_baseline_bookmark_border_24));
            postsList.add(new PostsModel(R.drawable.story1,"Angle",R.drawable.ic_baseline_more_vert_24  ,R.drawable.story1,
                    R.drawable.ic_baseline_favorite_border_24, "5.9K", R.drawable.ic_baseline_chat_bubble_24, "941",
                    R.drawable.ic_baseline_send_24,"312", R.drawable.ic_baseline_bookmark_border_24));
            postsList.add(new PostsModel(R.drawable.story1,"Angle",R.drawable.ic_baseline_more_vert_24  ,R.drawable.story1,
                    R.drawable.ic_baseline_favorite_border_24, "5.9K", R.drawable.ic_baseline_chat_bubble_24, "941",
                    R.drawable.ic_baseline_send_24,"312", R.drawable.ic_baseline_bookmark_border_24));

          // add notify here
          post_adapter.notifyDataSetChanged();
        }
    
        private void post_RV_ids() {
            recyclerView = findViewById(R.id.recyclerView);
            linearLayoutManager = new LinearLayoutManager(this);
            linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
            recyclerView.setLayoutManager(linearLayoutManager);
            post_adapter = new PostAdapter(postsList);
            recyclerView.setAdapter(post_adapter);
            // removed notify from here
        }
    }

解决问题有两点:

第一:你写过:

setContentView(R.layout.activity_main); 

两次。

您必须删除其中的第二个..

第二:

notifyDataSetChanged()

必须删除,因为在这种情况下您不需要此 function。

我希望这可以帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM