RecyclerView没有LayoutManager Android
我试图使用RecyclerView在片段中显示数据,但它一直显示错误RecyclerView没有LayoutManager 这是我的适配器RecyclerView没有LayoutManager Android,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我试图使用RecyclerView在片段中显示数据,但它一直显示错误RecyclerView没有LayoutManager 这是我的适配器 public class FilmAdapter extends RecyclerView.Adapter<FilmAdapter.FilmViewHolder> { private List<Film> mFilmList; private Context context; public Film
public class FilmAdapter extends RecyclerView.Adapter<FilmAdapter.FilmViewHolder> {
private List<Film> mFilmList;
private Context context;
public FilmAdapter(List <Film> FilmList) {
mFilmList= FilmList;
}
public static class FilmViewHolder extends RecyclerView.ViewHolder {
ImageView foto;
public FilmViewHolder(View v) {
super(v);
foto = (ImageView) v.findViewById(R.id.posterFilm);
}
}
@Override
public FilmAdapter.FilmViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_film, parent, false);
FilmAdapter.FilmViewHolder mViewHolder = new FilmAdapter.FilmViewHolder(mView);
return mViewHolder;
}
@Override
public void onBindViewHolder(FilmViewHolder holder, int position) {
Picasso.with(context).load("http://ecinema.esy.es/img/" + mFilmList.get(position).getBackdropPath()).resize(200, 250).into(holder.foto);
}
@Override
public int getItemCount() {
return mFilmList.size();
}
}
但这仍然是一个错误。有人能帮忙吗?提前感谢mRecyclerview来自哪里?它不是应该是recyclerview吗?通过将适配器更改为
public class FilmAdapter extends RecyclerView.Adapter<FilmAdapter.FilmViewHolder> {
private List<Film> mFilmList;
private Context context;
public FilmAdapter(List <Film> FilmList) {
mFilmList= FilmList;
}
@Override
public FilmViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_film, parent, false);
FilmViewHolder mViewHolder = new FilmViewHolder(mView);
return mViewHolder;
}
@Override
public void onBindViewHolder(FilmViewHolder holder, int position) {
Picasso.with(context).load("http://ecinema.esy.es/img/" + mFilmList.get(position).getBackdropPath()).resize(200, 250).into(holder.foto);
}
public static class FilmViewHolder extends RecyclerView.ViewHolder {
public ImageView foto;
public FilmViewHolder(View v) {
super(v);
foto = (ImageView) v.findViewById(R.id.posterFilm);
}
}
@Override
public int getItemCount() {
return mFilmList.size();
}
}
公共类FilmAdapter扩展了RecyclerView.Adapter{
私人名单;
私人语境;
公共FilmAdapter(列表FilmList){
mFilmList=电影列表;
}
@凌驾
public FilmViewHolder onCreateViewHolder(视图组父级,int-viewType){
View mView=LayoutInflater.from(parent.getContext()).flate(R.layout.grid_film,parent,false);
FilmViewHolder mViewHolder=新的FilmViewHolder(mView);
返回mViewHolder;
}
@凌驾
BindViewHolder上的公共无效(FilmViewHolder,内部位置){
毕加索.with(context).load(“http://ecinema.esy.es/img/“+mFilmList.get(position.getBackdropPath()).resize(200250).into(holder.foto);
}
公共静态类FilmViewHolder扩展了RecyclerView.ViewHolder{
公众形象观;
公众电影观看者(视图v){
超级(五);
foto=(图像视图)v.findViewById(R.id.posterFilm);
}
}
@凌驾
public int getItemCount(){
返回mFilmList.size();
}
}
而这个碎片
public class NowPlayingFragment extends Fragment implements RecyclerItemClickListener.OnItemClickListener{
ApiInterface mApiInterface;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public static MainActivity m;
String idKota = m.getIdKota();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_now_playing, container, false);
mRecyclerView = (RecyclerView) v.findViewById(R.id.rootLayout);
mLayoutManager = new LinearLayoutManager(this.getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setHasFixedSize(true);
mApiInterface = ApiClient.getClient().create(ApiInterface.class);
mAdapter = new FilmAdapter(new ArrayList<Film>());
mRecyclerView.setAdapter(mAdapter);
refresh();
return v;
}
public void refresh() {
Call<List<Film>> call = mApiInterface.getFilmPlaying(
idKota
);
call.enqueue(new Callback<List<Film>>() {
@Override
public void onResponse(Call<List<Film>> call, Response<List<Film>> response) {
List<Film> FilmList = response.body();
Log.d("Retrofit Get", "Jumlah data : " +
String.valueOf(FilmList.size()));
mAdapter = new FilmAdapter(FilmList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<List<Film>>call, Throwable t) {
Log.e("Retrofit Get", t.toString());
}
});
//mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), this));
}
@Override
public void onItemClick(View childView, int position) {
}
@Override
public void onItemLongPress(View childView, int position) {
}
}
公共类NowPlayingFragment扩展片段实现RecyclerItemClickListener.OnItemClickListener{
api接口;
私人回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
公共静态维护活动;
字符串idKota=m.getIdKota();
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.fragment\u now\u playing,container,false);
mRecyclerView=(RecyclerView)v.findViewById(R.id.rootLayout);
mLayoutManager=newlinearlayoutmanager(this.getActivity());
mRecyclerView.setLayoutManager(mllayoutmanager);
mRecyclerView.setHasFixedSize(true);
mApiInterface=ApiClient.getClient().create(ApiInterface.class);
mAdapter=newfilmadapter(newarraylist());
mRecyclerView.setAdapter(mAdapter);
刷新();
返回v;
}
公共无效刷新(){
Call Call=mApiInterface.getFilmPlaying(
伊德科塔
);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List FilmList=response.body();
Log.d(“改造获取”,“Jumlah数据:”+
String.valueOf(FilmList.size());
mAdapter=新的FilmAdapter(FilmList);
mRecyclerView.setAdapter(mAdapter);
}
@凌驾
失败时公共无效(Callcall、Throwable t){
Log.e(“改造Get”,t.toString());
}
});
//mRecyclerView.addOnItemTouchListener(新的RecyclerItemClickListener(getActivity(),this));
}
@凌驾
public void onItemClick(视图子视图,int位置){
}
@凌驾
公共视图(视图子视图,内部位置){
}
}
地点
以前
mRecyclerView.setLayoutManager(mllayoutmanager) 删除回收器视图内的相对布局。不受其他布局或编辑器输入标记的影响,使用回收器视图不要在回收器视图本身中使用嵌套的子元素,而是使用另一个布局并将其膨胀。参考这个@whenthemorningcomes你是指activityMain中的RecyclerView吗?不,关于片段中的RecyclerView\u now\u playing.xml有什么交易?您在哪里扩展此视图?@Whenthemornings我删除了片段中的RecyclerView,但仍然错误RecyclerView没有布局管理器您可以发布grid\u film.xml文件的代码片段吗?如果可能,请同时发布logcat信息;如果使用recyclerview而不是mRecycleview,会发生什么?
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ecinema.sekaranindyaputri.ecinema.Home.NowPlayingFragment">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ViewFlipper
android:layout_width="fill_parent"
android:layout_height="113dp"
android:id="@+id/slideFilm">
</ViewFlipper>
</LinearLayout>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_centerInParent="true"
android:visibility="gone"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<GridView
android:id="@+id/gridPlaying"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="0dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@color/colorPrimary"
android:clickable="true"
android:columnWidth="150dp"
android:drawSelectorOnTop="true"
android:focusable="true"
android:gravity="center"
android:horizontalSpacing="5dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="5dp" />
</RelativeLayout>
</android.support.v7.widget.RecyclerView>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:id="@+id/filmLayout">
<ImageView
android:layout_width="165dp"
android:layout_height="150dp"
android:id="@+id/posterFilm"
android:layout_alignParentEnd="true" />
</LinearLayout>
Logcat
05-08 19:44:05.852 30270-30270/com.ecinema.sekaranindyaputri.ecinema E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ecinema.sekaranindyaputri.ecinema, PID: 30270
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ecinema.sekaranindyaputri.ecinema/com.ecinema.sekaranindyaputri.ecinema.MainActivity}: android.view.InflateException: Binary XML file line #1: RecyclerView has no LayoutManager
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
Caused by: android.view.InflateException: Binary XML file line #1: RecyclerView has no LayoutManager
at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
at com.ecinema.sekaranindyaputri.ecinema.Home.NowPlayingFragment.onCreateView(NowPlayingFragment.java:48)
at android.app.Fragment.performCreateView(Fragment.java:2220)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:799)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1537)
at android.app.FragmentController.execPendingActions(FragmentController.java:325)
at android.app.Activity.performStart(Activity.java:6319)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
Caused by: java.lang.IllegalStateException: RecyclerView has no LayoutManager
at android.support.v7.widget.RecyclerView.generateLayoutParams(RecyclerView.java:3737)
at android.view.LayoutInflater.inflate(LayoutInflater.java:506)
at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
at com.ecinema.sekaranindyaputri.ecinema.Home.NowPlayingFragment.onCreateView(NowPlayingFragment.java:48)
at android.app.Fragment.performCreateView(Fragment.java:2220)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:799)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1537)
at android.app.FragmentController.execPendingActions(FragmentController.java:325)
at android.app.Activity.performStart(Activity.java:6319)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
at android.app.ActivityThread.access$900(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
mRecyclerView.setHasFixedSize(true);
public class FilmAdapter extends RecyclerView.Adapter<FilmAdapter.FilmViewHolder> {
private List<Film> mFilmList;
private Context context;
public FilmAdapter(List <Film> FilmList) {
mFilmList= FilmList;
}
@Override
public FilmViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_film, parent, false);
FilmViewHolder mViewHolder = new FilmViewHolder(mView);
return mViewHolder;
}
@Override
public void onBindViewHolder(FilmViewHolder holder, int position) {
Picasso.with(context).load("http://ecinema.esy.es/img/" + mFilmList.get(position).getBackdropPath()).resize(200, 250).into(holder.foto);
}
public static class FilmViewHolder extends RecyclerView.ViewHolder {
public ImageView foto;
public FilmViewHolder(View v) {
super(v);
foto = (ImageView) v.findViewById(R.id.posterFilm);
}
}
@Override
public int getItemCount() {
return mFilmList.size();
}
}
public class NowPlayingFragment extends Fragment implements RecyclerItemClickListener.OnItemClickListener{
ApiInterface mApiInterface;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public static MainActivity m;
String idKota = m.getIdKota();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_now_playing, container, false);
mRecyclerView = (RecyclerView) v.findViewById(R.id.rootLayout);
mLayoutManager = new LinearLayoutManager(this.getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setHasFixedSize(true);
mApiInterface = ApiClient.getClient().create(ApiInterface.class);
mAdapter = new FilmAdapter(new ArrayList<Film>());
mRecyclerView.setAdapter(mAdapter);
refresh();
return v;
}
public void refresh() {
Call<List<Film>> call = mApiInterface.getFilmPlaying(
idKota
);
call.enqueue(new Callback<List<Film>>() {
@Override
public void onResponse(Call<List<Film>> call, Response<List<Film>> response) {
List<Film> FilmList = response.body();
Log.d("Retrofit Get", "Jumlah data : " +
String.valueOf(FilmList.size()));
mAdapter = new FilmAdapter(FilmList);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onFailure(Call<List<Film>>call, Throwable t) {
Log.e("Retrofit Get", t.toString());
}
});
//mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), this));
}
@Override
public void onItemClick(View childView, int position) {
}
@Override
public void onItemLongPress(View childView, int position) {
}
}
mRecyclerView.setHasFixedSize(true);