1. 涉及到的技术点
- 列表控件RecyclerView的使用
- Adapter适配器的使用
2. 具体代码实现
- activity_cinema_list.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".CinemaListActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/purple_200"
app:navigationIcon="@drawable/ic_baseline_arrow_back_ios_24"
app:title="影院列表"
app:titleTextColor="@color/white" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/cinema_list_item" />
</androidx.appcompat.widget.LinearLayoutCompat>
- 适配器所需要的Item布局文件cinema_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_cinema_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="90dp"
android:text="0090激光影城"
android:textColor="#333333"
android:textSize="15sp" />
<TextView
android:id="@+id/tv_cinema_address"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:drawableLeft="@drawable/ic_baseline_location_on_24"
android:gravity="center_vertical"
android:text="闵行区七莘路1507号4层电影院"
android:textColor="#999999"
android:textSize="13sp" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="#fef8e0">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="6dp"
android:paddingTop="3dp"
android:paddingRight="6dp"
android:paddingBottom="3dp"
android:text="4DX厅"
android:textColor="#f5810d"
android:textSize="10sp"
android:textStyle="bold" />
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:backgroundTint="#ffeef4">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="6dp"
android:paddingTop="3dp"
android:paddingRight="6dp"
android:paddingBottom="3dp"
android:text="杜比全景声厅"
android:textColor="#d67477"
android:textSize="10sp"
android:textStyle="bold" />
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:backgroundTint="#f4ead4">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="6dp"
android:paddingTop="3dp"
android:paddingRight="6dp"
android:paddingBottom="3dp"
android:text="LUXE巨幕厅"
android:textColor="#99763c"
android:textSize="10sp"
android:textStyle="bold" />
</androidx.cardview.widget.CardView>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="10dp"
android:background="#f5f5f5" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:backgroundTint="@color/purple_200"
app:cardCornerRadius="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="26dp"
android:gravity="center"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="选座购票"
android:textColor="@color/white"
android:textSize="11sp" />
</androidx.cardview.widget.CardView>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
- 适配器CinemaListAdapter.java文件
public class CinemaListAdapter extends RecyclerView.Adapter<CinemaListAdapter.MyHolder> {
private List<CinemaInfo> mCinemaInfoList = new ArrayList<>();
public void setCinemaInfoList(List<CinemaInfo> commentInfoList) {
mCinemaInfoList = commentInfoList;
notifyDataSetChanged();
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cinema_list_item, parent, false);
return new MyHolder(view);
}
@Override
@SuppressLint("RecyclerView")
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
CinemaInfo cinemaInfo = mCinemaInfoList.get(position);
holder.tv_cinema_name.setText(cinemaInfo.getCinema_name());
holder.tv_cinema_address.setText(cinemaInfo.getCinema_address());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onItemClickListener != null)
onItemClickListener.onItemClick(position, cinemaInfo);
}
});
}
@Override
public int getItemCount() {
return mCinemaInfoList.size();
}
static class MyHolder extends RecyclerView.ViewHolder {
private TextView tv_cinema_name;
private TextView tv_cinema_address;
public MyHolder(@NonNull View itemView) {
super(itemView);
tv_cinema_name = itemView.findViewById(R.id.tv_cinema_name);
tv_cinema_address = itemView.findViewById(R.id.tv_cinema_address);
}
}
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void onItemClick(int position, CinemaInfo cinemaInfo);
}
}
- CinemaListActivity.java页面
public class CinemaListActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CinemaListAdapter mCinemaListAdapter;
private MovieInfo.SubjectsDTO subjectsDTO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cinema_list);
//获取跳转传值
subjectsDTO = (MovieInfo.SubjectsDTO) getIntent().getSerializableExtra("subjectsDTO");
//初始化控件
recyclerView = findViewById(R.id.recyclerView);
//初始化适配器
mCinemaListAdapter = new CinemaListAdapter();
//设置适配器
recyclerView.setAdapter(mCinemaListAdapter);
//设置数据
mCinemaListAdapter.setCinemaInfoList(DataService.getCinemaInfoList());
//设置监听器
mCinemaListAdapter.setOnItemClickListener(new CinemaListAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position, CinemaInfo cinemaInfo) {
//跳转到电影购票选日期页面
Intent intent = new Intent(CinemaListActivity.this, SelectMovieDateActivity.class);
intent.putExtra("cinemaInfo", cinemaInfo);
intent.putExtra("subjectsDTO", subjectsDTO);
startActivity(intent);
}
});
//返回
findViewById(R.id.toolbar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
- CinemaInfo.java 数据实体类
public class CinemaInfo implements Serializable {
private String cinema_name;
private String cinema_address;
public CinemaInfo(String cinema_name, String cinema_address) {
this.cinema_name = cinema_name;
this.cinema_address = cinema_address;
}
public String getCinema_name() {
return cinema_name;
}
public void setCinema_name(String cinema_name) {
this.cinema_name = cinema_name;
}
public String getCinema_address() {
return cinema_address;
}
public void setCinema_address(String cinema_address) {
this.cinema_address = cinema_address;
}
}
注意事项:数据源自行替换即可