Java 尝试将水平recycleview嵌套到垂直recycleview中

Java 尝试将水平recycleview嵌套到垂直recycleview中,java,android,android-recyclerview,nested,Java,Android,Android Recyclerview,Nested,我是android新手,尝试在垂直循环视图中创建水平循环视图 我一直在关注这个博客: 但我觉得我的睡衣少了些什么,但我没能弄清楚。我的应用程序打开时崩溃 编辑:所以它不再崩溃了,但在日志中它说:com.example.movie\u ticket\u booking E/RecyclerView:没有连接适配器;跳过布局 RecycleviewAdapter.java public class RecycleviewAdapter extends RecyclerView.Adapter&l

我是android新手,尝试在垂直循环视图中创建水平循环视图

我一直在关注这个博客:

但我觉得我的睡衣少了些什么,但我没能弄清楚。我的应用程序打开时崩溃

编辑:所以它不再崩溃了,但在日志中它说:com.example.movie\u ticket\u booking E/RecyclerView:没有连接适配器;跳过布局

RecycleviewAdapter.java

  public class RecycleviewAdapter extends RecyclerView.Adapter<RecycleviewAdapter.recycleviewHolder> {
        private final ArrayList<String> cinemalist;
        //private LayoutInflater inflateboss;
        private Context mcontext;
CinemashowtimeDataSource dataSource=CinemashowtimeDataSource.getInstance();
CinemaShowtimeRepository dataRepository=CinemaShowtimeRepository.getInstance(dataSource);
    Date startTime = new Date(0, 0, 0, 10, 30);
    List<Showtime> listTimes = dataRepository.getListShowtimes(startTime);

    @NonNull
    @Override
    public recycleviewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View cinemaView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cinema_view,null);
        recycleviewHolder holder=new recycleviewHolder(cinemaView);
        //return new recycleviewHolder(cinemaView,this);
        return  holder;
    }

    @Override
    public void onBindViewHolder(@NonNull recycleviewHolder recycleviewHolder, int i) {
        String current=cinemalist.get(i);
        cinemaAdapter showlist= new cinemaAdapter(mcontext,listTimes);
        recycleviewHolder.recyclerchild.setLayoutManager(new LinearLayoutManager(mcontext,LinearLayoutManager.HORIZONTAL,false));
        recycleviewHolder.recyclerchild.setAdapter(showlist);
        recycleviewHolder.cinema.setText(current);
        recycleviewHolder.recyclerchild.setNestedScrollingEnabled(false);
    }

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

    class recycleviewHolder extends RecyclerView.ViewHolder{
        public final RecyclerView recyclerchild;
        public final TextView cinema;
        //final RecycleviewAdapter adapterboss;

        public recycleviewHolder(@NonNull View cinemaView){
            super((cinemaView));
            recyclerchild=cinemaView.findViewById(R.id.recyleview1);
            cinema=cinemaView.findViewById(R.id.cinemaName);
            //this.adapterboss=adapter;
        }
    }

    public RecycleviewAdapter(Context context,ArrayList<String> cinema){
        this.cinemalist=cinema;
        this.mcontext=context;
        //inflateboss=LayoutInflater.from(context);
    }

}
public class cinemaAdapter extends RecyclerView.Adapter<cinemaAdapter.cinemaViewHolder> {

    //private final ArrayList<String> cinemalist;    //test array
    private final List<Showtime> showtimelist;
    private LayoutInflater inflate;


    class cinemaViewHolder extends RecyclerView.ViewHolder {
        //public final TextView cinemaItemView;
        public final Button showButton;
        final cinemaAdapter madapter;

        public cinemaViewHolder(@NonNull View itemView,cinemaAdapter adapter) {
            super(itemView);
            //cinemaItemView=itemView.findViewById(R.id.word);
            showButton=itemView.findViewById(R.id.showtime_button);
            this.madapter=adapter;
        }
    }
    /* TEST ADAPTER
    public cinemaAdapter(Context context,ArrayList<String> list){
        inflate=LayoutInflater.from(context);
        this.cinemalist=list;
    }*/

    // NEW ADAPTER
    public cinemaAdapter(Context context, List<Showtime> showtimes){
        inflate=LayoutInflater.from(context);
        this.showtimelist=showtimes;
    }

    @NonNull
    @Override
    public cinemaAdapter.cinemaViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View cinemaView=inflate.inflate(R.layout.showtime_view,viewGroup,false);
        return new cinemaViewHolder(cinemaView,this);
    }

    @Override
    public void onBindViewHolder(@NonNull cinemaAdapter.cinemaViewHolder cinemaViewHolder, int i) {
        //String mcurrent=cinemalist.get(i);
        //cinemaViewHolder.cinemaItemView.setText(mcurrent);
        String mcurrent=String.format( "%d : %d",showtimelist.get(i).getTime().getHours(),showtimelist.get(i).getTime().getMinutes());
        cinemaViewHolder.showButton.setText(mcurrent);
    }

    @Override
    public int getItemCount() {
        //return cinemalist.size();
        return showtimelist.size();
    }

}
公共类RecycleView适配器扩展了RecycleView.Adapter{ 私人最终ArrayList影院名单; //私人停车场;更平坦的充气桥; 私有上下文; CinemashowtimeDataSource dataSource=CinemashowtimeDataSource.getInstance(); CinemaShowtimeRepository dataRepository=CinemaShowtimeRepository.getInstance(数据源); 日期开始时间=新日期(0,0,0,10,30); List listTimes=dataRepository.getListShowtimes(startTime); @非空 @凌驾 public recycleviewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){ View cinemaView=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.cinema\u视图,null); RecycleViewWorder支架=新的RecycleViewWorder(cinemaView); //返回新的RecycleView文件夹(cinemaView,此); 报税表持有人; } @凌驾 BindViewHolder上的公共无效(@NonNull recycleviewHolder recycleviewHolder,int i){ 字符串当前=cinemalist.get(i); cinemaAdapter showlist=新的cinemaAdapter(mcontext,listTimes); recycleviewHolder.recyclerchild.setLayoutManager(新的LinearLayoutManager(mcontext,LinearLayoutManager.HORIZONTAL,false)); recycleviewHolder.recyclerchild.setAdapter(显示列表); recycleviewHolder.cinema.setText(当前); recycleviewHolder.recyclerchild.setNestedScrollingEnabled(false); } @凌驾 public int getItemCount(){ 返回cinemalist.size(); } 类recycleviewHolder扩展了RecycleView.ViewHolder{ 公共最终回收商查看回收商儿童; 公共影院; //最终循环水适配器支架; 公共回收文件夹(@NonNull View-cinemaView){ 超级((cinemaView)); recyclerchild=cinemaView.findViewById(R.id.recyleview1); cinema=cinemaView.findViewById(R.id.cinemaName); //this.adapterboss=适配器; } } 公共循环电子适配器(上下文、ArrayList电影院){ this.cinemalist=电影院; this.mcontext=上下文; //inflateboss=LayoutInflater.from(上下文); } } cinemaAdapter.java

  public class RecycleviewAdapter extends RecyclerView.Adapter<RecycleviewAdapter.recycleviewHolder> {
        private final ArrayList<String> cinemalist;
        //private LayoutInflater inflateboss;
        private Context mcontext;
CinemashowtimeDataSource dataSource=CinemashowtimeDataSource.getInstance();
CinemaShowtimeRepository dataRepository=CinemaShowtimeRepository.getInstance(dataSource);
    Date startTime = new Date(0, 0, 0, 10, 30);
    List<Showtime> listTimes = dataRepository.getListShowtimes(startTime);

    @NonNull
    @Override
    public recycleviewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View cinemaView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cinema_view,null);
        recycleviewHolder holder=new recycleviewHolder(cinemaView);
        //return new recycleviewHolder(cinemaView,this);
        return  holder;
    }

    @Override
    public void onBindViewHolder(@NonNull recycleviewHolder recycleviewHolder, int i) {
        String current=cinemalist.get(i);
        cinemaAdapter showlist= new cinemaAdapter(mcontext,listTimes);
        recycleviewHolder.recyclerchild.setLayoutManager(new LinearLayoutManager(mcontext,LinearLayoutManager.HORIZONTAL,false));
        recycleviewHolder.recyclerchild.setAdapter(showlist);
        recycleviewHolder.cinema.setText(current);
        recycleviewHolder.recyclerchild.setNestedScrollingEnabled(false);
    }

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

    class recycleviewHolder extends RecyclerView.ViewHolder{
        public final RecyclerView recyclerchild;
        public final TextView cinema;
        //final RecycleviewAdapter adapterboss;

        public recycleviewHolder(@NonNull View cinemaView){
            super((cinemaView));
            recyclerchild=cinemaView.findViewById(R.id.recyleview1);
            cinema=cinemaView.findViewById(R.id.cinemaName);
            //this.adapterboss=adapter;
        }
    }

    public RecycleviewAdapter(Context context,ArrayList<String> cinema){
        this.cinemalist=cinema;
        this.mcontext=context;
        //inflateboss=LayoutInflater.from(context);
    }

}
public class cinemaAdapter extends RecyclerView.Adapter<cinemaAdapter.cinemaViewHolder> {

    //private final ArrayList<String> cinemalist;    //test array
    private final List<Showtime> showtimelist;
    private LayoutInflater inflate;


    class cinemaViewHolder extends RecyclerView.ViewHolder {
        //public final TextView cinemaItemView;
        public final Button showButton;
        final cinemaAdapter madapter;

        public cinemaViewHolder(@NonNull View itemView,cinemaAdapter adapter) {
            super(itemView);
            //cinemaItemView=itemView.findViewById(R.id.word);
            showButton=itemView.findViewById(R.id.showtime_button);
            this.madapter=adapter;
        }
    }
    /* TEST ADAPTER
    public cinemaAdapter(Context context,ArrayList<String> list){
        inflate=LayoutInflater.from(context);
        this.cinemalist=list;
    }*/

    // NEW ADAPTER
    public cinemaAdapter(Context context, List<Showtime> showtimes){
        inflate=LayoutInflater.from(context);
        this.showtimelist=showtimes;
    }

    @NonNull
    @Override
    public cinemaAdapter.cinemaViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View cinemaView=inflate.inflate(R.layout.showtime_view,viewGroup,false);
        return new cinemaViewHolder(cinemaView,this);
    }

    @Override
    public void onBindViewHolder(@NonNull cinemaAdapter.cinemaViewHolder cinemaViewHolder, int i) {
        //String mcurrent=cinemalist.get(i);
        //cinemaViewHolder.cinemaItemView.setText(mcurrent);
        String mcurrent=String.format( "%d : %d",showtimelist.get(i).getTime().getHours(),showtimelist.get(i).getTime().getMinutes());
        cinemaViewHolder.showButton.setText(mcurrent);
    }

    @Override
    public int getItemCount() {
        //return cinemalist.size();
        return showtimelist.size();
    }

}
公共类cinemaAdapter扩展了RecyclerView.Adapter{
//私有最终数组列表cinemalist;//测试数组
私人最终名单显示时间;
私人住宅价格上涨;
类cinemaViewHolder扩展了RecyclerView.ViewHolder{
//公共最终文本视图cinemaItemView;
公共最终按钮显示按钮;
最终电影配音器;
公共cinemaViewHolder(@NonNull视图项视图,cinemaAdapter适配器){
超级(项目视图);
//cinemaItemView=itemView.findViewById(R.id.word);
showButton=itemView.findViewById(R.id.showtime_按钮);
这个.madapter=适配器;
}
}
/*测试适配器
公共cinemaAdapter(上下文上下文、ArrayList列表){
充气=从(上下文)开始更平;
this.cinemalist=list;
}*/
//新适配器
公共cinemaAdapter(上下文上下文、列表显示时间){
充气=从(上下文)开始更平;
this.showtimelist=showtimes;
}
@非空
@凌驾
public cinemaAdapter.cinemaViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
视图cinemaView=充气。充气(R.layout.showtime\u视图,视图组,false);
返回新的cinemaView支架(cinemaView,本);
}
@凌驾
公共无效onBindViewHolder(@NonNull cinemaAdapter.cinemaViewHolder cinemaViewHolder,int i){
//字符串mcurrent=cinemalist.get(i);
//cinemaViewHolder.cinemaItemView.setText(MCCurrent);
String mcurrent=String.format(“%d:%d”、showtimelist.get(i).getTime().getHours()、showtimelist.get(i).getTime().getMinutes());
cinemaViewHolder.showButton.setText(MCCurrent);
}
@凌驾
public int getItemCount(){
//返回cinemalist.size();
返回showtimelist.size();
}
}
MainActivity.java

public class MainActivity extends AppCompatActivity {
    private  final String TAG = this.getClass().getSimpleName();;
    private final ArrayList<String> cinemalist=new ArrayList<>();
    private RecyclerView mRecycleView;
    private cinemaAdapter madapter;
    private RecycleviewAdapter radapter;
    CinemashowtimeDataSource dataSource;
    CinemaShowtimeRepository dataRepository;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().hide();

        //initial arraylist
        cinemalist.add("Cgv The Dark Kngiht");
        cinemalist.add("Cgv Avater");
        cinemalist.add("Cgv Star Wars");
        cinemalist.add("Cgv Avenger");
        cinemalist.add("Cgv Night crawler");
        cinemalist.add("Cgv Southpaw");

        //////////////////////////////////
        dataSource = CinemashowtimeDataSource.getInstance();
        dataRepository = CinemaShowtimeRepository.getInstance(dataSource);

        //    get the sample movie information data from data repository
        MovieInfo movie = dataRepository.getMovieInfo();
        Log.d(TAG, String.format("Movie title: %s", movie.getMovieTitle()));

        //    get list of date from data repository with start date. It will get 10 dates from dummy
        // data source
        Date startDate = new Date(2019, 05, 28);
        List<Date> listDates = dataRepository.getListDates(startDate);
        for (Date date : listDates) {
            Log.d(
                    TAG,
                    String.format("d/M/y = %d / %d / %d ;", date.getDate(), date.getMonth(), date.getYear()));
        }

        //    get list of showtimes from data repository with starting time. It will get 10 showtimes
        // from dummy data source
        Date startTime = new Date(0, 0, 0, 10, 30);
        List<Showtime> listTimes = dataRepository.getListShowtimes(startTime);

        //horizontal recycleview working
        //mRecycleView =findViewById(R.id.parent_recycleview);
        //madapter=new cinemaAdapter(this,listTimes);
        //mRecycleView.setAdapter(madapter);
        //mRecycleView.setLayoutManager(new GridLayoutManager(this,1,GridLayoutManager.HORIZONTAL,false));


        mRecycleView =findViewById(R.id.parent_recycleview);
        radapter=new RecycleviewAdapter(this,cinemalist);
        mRecycleView.setAdapter(madapter);
        mRecycleView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));


        for (Showtime time : listTimes) {
            Log.d(
                    TAG,
                    String.format(
                            "h:m = %d : %d; is available = %b",
                            time.getTime().getHours(), time.getTime().getMinutes(), time.isAvailable()));
        }
        //////////////////////////////////////////////////

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}
public类MainActivity扩展了AppCompatActivity{
私有最终字符串标记=this.getClass().getSimpleName();;
private final ArrayList cinemalist=新ArrayList();
私人回收视图mRecycleView;
私人影院;
私人回收雷达;
CinemashowtimeDataSource数据源;
CinemaShowtimeRepository数据存储库;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().hide();
//初始阵列列表
添加(“Cgv黑暗克林希特”);
添加(“Cgv Avater”);
电影列表。添加(“Cgv星球大战”);
添加(“Cgv复仇者”);
添加(“Cgv夜间爬虫”);
添加(“Cgv左撇子”);
//////////////////////////////////
dataSource=CinemashowtimeDataSource.getInstance();
dataRepository=CinemaShowtimeRepository.getInstance(数据源);
//从数据存储库获取示例电影信息数据
MovieInfo movie=dataRepository.getMovieInfo();
Log.d(TAG,String.format(“电影标题:%s”,Movie.getMovieTitle());
//从数据存储库中获取具有开始日期的日期列表。它将从dummy中获取10个日期
//数据源
起始日期
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="80dp"
    android:layout_height="26dp"
    android:layout_marginTop="10dp"
    android:layout_marginStart="20dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <Button
        android:layout_height="26dp"
        android:layout_width="match_parent"
        android:layout_gravity="center_horizontal"
        android:id="@+id/showtime_button"
        android:background="@drawable/button_border"
        android:text=""
        android:elevation="4dp"
        android:clickable="true"
        android:focusable="auto"/>
</android.support.v7.widget.CardView>