2016-08-01 21 views
0

我有導航抽屜中的菜單,像「Movies,Music,Books」等位置。我決定爲每個類別創建Fragment和適配器,所以它會顯示爲不同的列表。RecycleView它片段 - 嘗試調用虛擬方法

這是我的第一個分段的代碼 - 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) 

我該如何解決這個問題?

什麼是最好的解決方案輕鬆地添加新的職位列表?

問候

+0

你爲什麼要這樣做***返回null; ***在*** onCreateViewHolder *** ???? –

+1

我想你應該仔細檢查'fragment_movies'以確保'moviesRecyclerView'存在那裏 – Minhtdh

+0

我完全同意這一點;請張貼您的XML文件的片段佈局 – Eenvincible

回答

0

可能通過這個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?

0

這是怎麼回事?

class MovieViewHolder extends RecyclerView.ViewHolder{ 


    private String movieTitle; 
    private TextView textView; 

    public MovieViewHolder(View itemView) { 
    super(itemView); 
    //you have to findViewById here and not just cast it!! 
    textView = (TextView) itemView; 
    } 


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

    public String getMovieTitle() { 
    return movieTitle; 
    } 

} 

此外,請不要在您的適配器中返回null

編輯

看樣子你也設置layoutManager兩次!

我希望這有助於!

相關問題