java - Fragment 中的 RecyclerView - 尝试调用虚拟方法

标签 java android android-fragments

我在抽屉导航中有菜单,其中包含“电影、音乐、书籍”等位置。我决定为每个类别创建 fragment 和适配器,因此它将显示为不同的列表。

这是我的第一个 fragment 的代码 - MoviesFragment.java

public class MoviesFragment extends Fragment {
private MovieAdapter movieAdapter;

@BindView(R.id.moviesRecyclerView)
RecyclerView moviesRecyclerView;


public MoviesFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_movies, container, false);
    ButterKnife.bind(this, view);
    moviesRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    moviesRecyclerView.setLayoutManager(layoutManager);


    moviesRecyclerView.setAdapter(movieAdapter);
    moviesRecyclerView.setItemAnimator(new DefaultItemAnimator());

    return view;

}}

我正在尝试将它与我的 MovieAdapter.java 连接,其代码是:

public class MovieAdapter extends RecyclerView.Adapter<MovieViewHolder>{


   private final FragmentActivity layoutInflater;
    private List<String> movies = new ArrayList<>();

    public MovieAdapter(FragmentActivity layoutInflater){

        this.layoutInflater = layoutInflater;
        movies.add("Pulp Fcition");
    }


    @Override
    public MovieViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      //  View view = layoutInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
       // return new MovieViewHolder(view);
        return null;
    }

    @Override
    public void onBindViewHolder(MovieViewHolder holder, int position) {
        String movieTitle = movies.get(position);
        holder.setMovieTitle(movieTitle);

    }

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


}

class MovieViewHolder extends RecyclerView.ViewHolder{


    private String movieTitle;
    private TextView textView;



    public MovieViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView;
    }


    public void setMovieTitle(String movieTitle) {
        this.movieTitle = movieTitle;
        textView.setText(movieTitle);
    }

    public String getMovieTitle() {
        return movieTitle;
    }

}

但我收到此错误:

7896-7896/zakrzk.myappname E/AndroidRuntime: FATAL EXCEPTION: main
                                                               Process: zakrzk.kurwtura, PID: 7896
                                                               Theme: themes:{default=overlay:system, iconPack:system, fontPkg:system, com.android.systemui=overlay:system, com.android.systemui.navbar=overlay:system}
                                                               java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference
                                                                   at zakrzk.kurwtura.MoviesFragment.onCreateView(MoviesFragment.java:40)
                                                                   at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
                                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
                                                                   at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)
                                                                   at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
                                                                   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                   at android.os.Looper.loop(Looper.java:148)
                                                                   at android.app.ActivityThread.main(ActivityThread.java:5461)
                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                   at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)

我该如何解决这个问题?

轻松向列表添加新职位的最佳解决方案是什么?

问候

最佳答案

可能是这个return语句导致的:

@Override
    public MovieViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      //  View view = layoutInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
       // return new MovieViewHolder(view);
        return null;
    }

为什么返回null?

关于java - Fragment 中的 RecyclerView - 尝试调用虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703756/

相关文章:

android - 将复杂对象从 Activity 传递到 fragment 对话框,反之亦然

java - Cron 表达式作为聚合器发布策略

java - 使用java邮件发送批量电子邮件需要太长时间

java - 按钮行为弹出一个窗口以获取用户输入,然后在按钮方法 NETBEANS 8.0.2 中对其执行某些操作

android - Android获取经纬度的方法

java - 有没有办法知道3个圆是否相交于一点: Java - Android Studio?

android - 获取内部存储路径以使用 MUPDF 打开复制的 PDF

android - 如何获取应用的洞察

android - 如何从 SharedPreferences 中的 Fragment 类保存对象数组列表

java - Java中的整数除法