android - 如何使用改造在 Android 适配器类中创建多个函数
问题描述
我有一个适配器,它保留了我需要的所有数据,但我想在两个类中使用适配器。一种在 recylerview 中显示数据,另一种仅在 ViewFlipper 中显示数据的图像。但我无法实现如何在我的适配器上创建多个功能以在另一个类(脚蹼)中使用它。
到目前为止,我将展示适配器的代码
public class AdapterCafe extends RecyclerView.Adapter<AdapterCafe.MyViewHolder> {
Context context;
List<CafeItem> cafe;
public AdapterCafe(Context context, List<CafeItem> data_cafe) {
this.context = context;
this.cafe = data_cafe;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.cafe_card, parent, false);
View view2 = LayoutInflater.from(context).inflate(R.layout.filppers_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
MyViewHolder holder2 = new MyViewHolder(view2);
holder2.tvNamacafeFlip.setText(cafe.get(viewType).getNamaCafe());
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
// Set widget
holder.tvNama.setText(cafe.get(position).getNamaCafe());
holder.tvAlamat.setText(cafe.get(position).getAlamatCafe());
final String urlGambarCafe = "http://192.168.43.159/web/ngafeapp/" + cafe.get(position).getFotoCafe();
Picasso.with(context).load(urlGambarCafe).into(holder.ivGambar);
Picasso.with(context).load(urlGambarCafe).into(holder.ivgambarFlip);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Mulai activity Detail
Intent varIntent = new Intent(context, cafedetailActivity.class);
// sisipkan data ke intent
varIntent.putExtra("ID_CAFE",cafe.get(position).getIdCafe());
varIntent.putExtra("NAMA_CAFE", cafe.get(position).getNamaCafe());
varIntent.putExtra("WKT_CAFE", cafe.get(position).getJamOperasionalWeekDay());
varIntent.putExtra("WKT_CAFE2", cafe.get(position).getJamOperasionalWeekEnd());
varIntent.putExtra("ALAMAT_CAFE", cafe.get(position).getAlamatCafe());
varIntent.putExtra("FOTO_CAFE", urlGambarCafe);
varIntent.putExtra("NO_TELEPON",cafe.get(position).getNoTelepon());
varIntent.putExtra("DESKRIPSI", cafe.get(position).getDeskripsiCafe());
varIntent.putExtra("LATITUDE",cafe.get(position).getLatitude());
varIntent.putExtra("LONGITUDE",cafe.get(position).getLongitude());
context.startActivity(varIntent);
}
});
}
@Override
public int getItemCount() {
return cafe.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ImageView ivGambar, ivgambarFlip;
TextView tvNama, tvAlamat,tvNamacafeFlip;
public MyViewHolder(View itemView) {
super(itemView);
ivGambar = (ImageView) itemView.findViewById(R.id.images_cafe);
tvNama = (TextView) itemView.findViewById(R.id.name_cafe);
tvAlamat= (TextView) itemView.findViewById(R.id.alamatcafe);
}
}
}
所以,我尝试制作其他视图,但它无法正常工作。你能帮我吗,如何解决它?
解决方案
最好将您的适配器定义为一个abstract class
并为这两个地方创建两个单独的类。
我猜你想要两个不同的onCreateViewHolder
功能。
- 适配器咖啡馆
public abstract class AdapterCafe extends RecyclerView.Adapter<AdapterCafe.MyViewHolder> {
// Add every thing that are not different for the two cases.
// Anything except `onCreateViewHolder`
}
- Case1适配器
class Case1Adapter extends AdapterCafe {
// Now override `onCreateViewHolder`
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.cafe_card, parent, false);
MyViewHolder holder = new MyViewHolder(view);
holder.tvNamacafeFlip.setText(cafe.get(viewType).getNamaCafe());
return holder;
}
- Case2适配器
class Case2Adapter extends AdapterCafe {
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view2 = LayoutInflater.from(context).inflate(R.layout.filppers_item, parent, false);
MyViewHolder holder2 = new MyViewHolder(view2);
holder2.tvNamacafeFlip.setText(cafe.get(viewType).getNamaCafe());
return holder;
}
推荐阅读
- node.js - 如何从“Web”更改应用程序洞察中 nodejs 应用程序服务的角色名称?
- python - Secondary x axis labels
- mysql - MySQL 工作台在服务器上完成查询时保持运行状态
- mysql - mysql中用户的排名
- graphql - 通过 GraphQL - 产品上公共/私有元字段的 CRUD
- image-processing - 检测图像是否被过度压缩
- c - 尝试解决 Hackerrank 中的挑战(倒数第 M 个元素)
- python - ImportError:dlopen(/usr/local/lib/python3.9/site-packages/PyQt5/QtWidgets.abi3.so,2):找不到符号:_InitSignatureStrings
- list - 当他/她登录百里香叶视图页面时,我们如何打印特定用户的待办事项列表
- html - 是否可以根据 cookie 将用户重定向到不同的页面?