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