Android Recyclerview 应用程序崩溃

Posted

技术标签:

【中文标题】Android Recyclerview 应用程序崩溃【英文标题】:Android Recycleview App crash 【发布时间】:2018-06-27 08:10:54 【问题描述】:

我正在尝试创建一个回收视图,并且我还在我的应用程序中使用标签布局。我一步一步地按照教程进行操作,但我不知道它为什么会崩溃。这是代码。我猜这部分有问题:

@Override
    public int getItemCount() 
        return herosList.size();
    

每当我将返回值更改为 0 时,应用程序都会运行,但 recycleview 中不会出现任何内容

public class Heros 
    public String name;
    public int img;


RecycleAdapter.java

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;    
import java.util.ArrayList;



public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.HerosViewHolder> 
    ArrayList<Heros> herosList;
    public RecycleAdapter(ArrayList<Heros> heross)
        herosList=heross;
    

    @Override
    public HerosViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.eachrow,parent,false);
        return new HerosViewHolder(view);
    

    @Override
    public void onBindViewHolder(HerosViewHolder holder, int position) 
        Heros heros=herosList.get(position);
        holder.txtName.setText(heros.name);

    

    @Override
    public int getItemCount() 
        return herosList.size();
    

    public class HerosViewHolder extends RecyclerView.ViewHolder
        public ImageView herosImg;
        public TextView txtName;
        public HerosViewHolder(View itemView) 
            super(itemView);
            herosImg=(ImageView) itemView.findViewById(R.id.imgg);
            txtName=(TextView)itemView.findViewById(R.id.txtHerosName);


        
    




public class PageFragment extends Fragment 
    public static final String ARG_PAGE = "ARG_PAGE";

    private int mPage;
    RecyclerView recyclerView;
    LinearLayoutManager manager;
    String[] names="abs","vline","chest";

    ArrayList<Heros> passName;

    public static PageFragment newInstance(int page) 
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, page);
        PageFragment fragment = new PageFragment();
        fragment.setArguments(args);
        return fragment;
    

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        mPage = getArguments().getInt(ARG_PAGE);
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        passName=new ArrayList<>();


        View view = inflater.inflate(R.layout.fragment_page, container,
                false);
        recyclerView=(RecyclerView)view.findViewById(R.id.rec);
        manager=new LinearLayoutManager(G.context);
        recyclerView.setLayoutManager(manager);
        recyclerView.setHasFixedSize(true);
        for (int i=0;i<3;i++)
            Heros heros=new Heros();
            heros.name=names[i];
            passName.add(heros);
        
        recyclerView.setAdapter(new RecycleAdapter(passName));


        return view;
    

【问题讨论】:

你遇到了什么错误? 添加崩溃的stacktrace 显示你的日志猫 在这个方法中使用这个关键字public RecycleAdapter(ArrayList&lt;Heros&gt; heross) this.herosList=heross; 任何堆栈跟踪??分享你的日志! 【参考方案1】:

检查一下它可能对你有帮助 公共类 PageFragment 扩展片段 公共静态最终字符串 ARG_PAGE = "ARG_PAGE";

private int mPage;
RecyclerView recyclerView;
LinearLayoutManager manager;
String[] names="abs","vline","chest";

ArrayList<Heros> passName;
RecycleAdapter adapter;
public static PageFragment newInstance(int page) 
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, page);
    PageFragment fragment = new PageFragment();
    fragment.setArguments(args);
    return fragment;


@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    mPage = getArguments().getInt(ARG_PAGE);


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
    passName=new ArrayList<>();


    View view = inflater.inflate(R.layout.fragment_page, container,
            false);
    recyclerView=(RecyclerView)view.findViewById(R.id.rec);
    manager=new LinearLayoutManager(G.context);
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    for (int i=0;i<3;i++)
        Heros heros=new Heros();
        heros.name=names[i];
        passName.add(heros);
    
 RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
                recyclerView.setLayoutManager(mLayoutManager);
adapter = new RecycleAdapter(this,passName);
    recyclerView.setAdapter(adapter);
    return view;

【讨论】:

【参考方案2】:

当你在getItemCount() 中返回 0 时,表示 RecyclerView 中有 0 个项目。这就是为什么您在RecyclerView 中看不到任何内容的原因。

但是您面临的问题可能是由于适配器接收到错误的数据...

【讨论】:

【参考方案3】:

尝试改变

 manager=new LinearLayoutManager(G.context);

manager=new LinearLayoutManager(getActivity());

【讨论】:

以上是关于Android Recyclerview 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Android 布局:具有滚动行为的 Viewpager 内的垂直 Recyclerview 内的水平 Recyclerview

应用程序在 recyclerview 滚动 android kotlin 时崩溃

Android:RecyclerView 显示图像 2 次

如何在android的Recyclerview中显示更多[重复]

Android TV RecyclerView重点互动

Android RecyclerView 选择第一个项目