java试图将水平recycleview嵌套到垂直recycleview中
我是安卓新手,正在尝试在垂直循环视图中创建水平循环视图
我一直在关注这个博客:https://安卓-pratap.blogspot.com/2015/12/horizontal-recyclerview-in-vertical.html
但我觉得我的睡衣少了些什么,但我没能弄明白。我的应用程序打开时崩溃
编辑:所以它不再崩溃了,但在logcat中它说:com。实例电影票预订E/RecyclerView:无适配器连接;跳过布局
回收水。爪哇
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();
}
}
主要活动。爪哇
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);
}
}
主要内容。xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:background="@color/white"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main"
安卓:orientation="vertical">
<安卓.support.v7.widget.RecyclerView
安卓:id="@+id/parent_recycleview"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent">
</安卓.support.v7.widget.RecyclerView>
</LinearLayout>
cinemaview。xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:layout_marginTop="15dp"
安卓:orientation="vertical">
<TextView
安卓:id="@+id/cinemaName"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:text="CGV blah blah blah"
安卓:textColor="#000000"
安卓:layout_marginStart="20dp"/>
<安卓.support.v7.widget.RecyclerView
安卓:id="@+id/recyleview1"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:layout_alignParentStart="true"
安卓:layout_marginTop="20dp">
</安卓.support.v7.widget.RecyclerView>
</LinearLayout>
showtime_视图。xml
<?xml version="1.0" encoding="utf-8"?>
<安卓.support.v7.widget.CardView xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="80dp"
安卓:layout_height="26dp"
安卓:layout_marginTop="10dp"
安卓:layout_marginStart="20dp"
xmlns:app="http://schemas.安卓.com/apk/res-auto">
<Button
安卓:layout_height="26dp"
安卓:layout_width="match_parent"
安卓:layout_gravity="center_horizontal"
安卓:id="@+id/showtime_button"
安卓:background="@drawable/button_border"
安卓:text=""
安卓:elevation="4dp"
安卓:clickable="true"
安卓:focusable="auto"/>
</安卓.support.v7.widget.CardView>
共 (0) 个答案