我想用RecyclerView创建一个电影应用程序。这个应用程序主要包括3个活动在第一活动电影类别例如:惊悚片,戏剧片......和第二活动电影图像和电影名称例如:海报或屏幕截图,关于第三活动的电影细节。我打算在这个应用程序中包含100多部电影。我想知道如何通过点击第一个活动上的相同电影类别打开电影的第二/海报活动页面,并通过在第二个活动上粘贴相同的电影图像来打开详细活动。请帮我...
这是我的第一个活动
RecyclerView mRecyclerView;
FirebaseDatabase mFirebaseDatabase;
DatabaseReference mRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_moviesmain);
//Actionbar
Toolbar toolbar = findViewById(R.id.MoviesMain_Toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Movie");
//set title
//RecyclerView
mRecyclerView = findViewById(R.id.Movies_recyclerView);
mRecyclerView.setHasFixedSize(true);
//set layout as LinearLayout
mRecyclerView.setLayoutManager(new LinearLayoutManager(this) );
//send Query to FirebaseDatabase
mFirebaseDatabase = FirebaseDatabase.getInstance();
mRef = mFirebaseDatabase.getReference("Movie");
}
//load data into recycler view onStart
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<MoviesModel, MoviesViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<MoviesModel, MoviesViewHolder>(
MoviesModel.class,
R.layout.moviesmainitems,
MoviesViewHolder.class,
mRef
) {
@Override
protected void populateViewHolder(MoviesViewHolder viewHolder, MoviesModel model, int position) {
viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getImage());
}
};
//set adapter to recyclerview
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
}
这是我的第一个模型
String image, title;
//constructor
public MoviesModel(){}
//getter and setters press Alt+Insert
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
这是我的第一个ViewHolder
View mView;
public MoviesViewHolder(View itemView) {
super(itemView);
mView = itemView;
//item click
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mClickListener.onItemClick(view, getAdapterPosition());
}
});
//item long click
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
mClickListener.onItemLongClick(view, getAdapterPosition());
return true;
}
});
}
//set details to recycler view moviesmainitems
public void setDetails(Context ctx, String title, String image){
//Views
TextView mDetailTv = mView.findViewById(R.id.rTitleTv);
ImageView mImageIv = mView.findViewById(R.id.rImageView);
//set data to views
mDetailTv.setText(title);
Picasso.get().load(image).into(mImageIv);
}
private MoviesViewHolder.ClickListener mClickListener;
//interface to send callbacks
public interface ClickListener{
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}
public void setOnClickListener(MoviesViewHolder.ClickListener clickListener){
mClickListener = clickListener;
}
这是我的第二项活动
RecyclerView mRecyclerView;
FirebaseDatabase mFirebaseDatabase;
DatabaseReference mRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_moviessecond);
//Actionbar
Toolbar toolbar = findViewById(R.id.MoviesSecond_Toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Movie");
//set title
//RecyclerView
mRecyclerView = findViewById(R.id.MoviesSecond_recyclerView);
mRecyclerView.setHasFixedSize(true);
//set layout as LinearLayout
mRecyclerView.setLayoutManager(new LinearLayoutManager(this) );
//send Query to FirebaseDatabase
mFirebaseDatabase = FirebaseDatabase.getInstance();
mRef = mFirebaseDatabase.getReference("Movie");
}
//load data into recycler view onStart
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<MoviesSecondModel, MoviesSecondViewHolder> firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<MoviesSecondModel, MoviesSecondViewHolder>(
MoviesModel.class,
R.layout.moviesseconditems,
MoviesSecondViewHolder.class,
mRef
) {
@Override
protected void populateViewHolder(MoviesSecondViewHolder viewHolder, MoviesSecondModel model, int position) {
viewHolder.setDetails(getApplicationContext(), model.getTitle(), model.getImage());
}
};
//set adapter to recyclerview
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
}
如果你想保持你的结构3活动,最好的方法是在你的Listener
中添加Adapter
,类似的东西:
public class MoveiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private OnInteractionListener mListener;
public MoveiAdapter(OnInteractionListener listener) {
mListener = listener;
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
holder.itemView.setOnClickListener(v -> {
if (mListener != null) {
mListener.onFooterClick();
}
});
}
}
public interface OnInteractionListener {
void onItemClick(int position);
}
}
并且你Activity
将实现这个接口OnInteractionListener
并且当onItemClick()
被调用时你可以打开下一个Activity
只是一个建议,你只能使用一个Activity
并使用Fragments