Search code examples
androidandroid-recyclerviewretrofitadapter

How To create multiple function in Adapter Class Android with Retrofit


I have an adapter, thats keep all data that i needed, but i want to use the adapter in two class. One to show data in recylerview,and other to show just the image of data in ViewFlipper. But i can't realize how to make a multiple function on my adapter to use it in another class(flipper).

I'll show the code so far, for the adapter

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);
    }
}

}

So, i try to make the othe View, but it can't works . Can you help me, how to fix it?


Solution

  • Best to define your adapter as an abstract class and make two separate class that you want to have for those two places.

    I guess you want to have two different onCreateViewHolder functions.

    • AdapterCafe
    public abstract class AdapterCafe extends RecyclerView.Adapter<AdapterCafe.MyViewHolder> {
     // Add every thing that are not different for the two cases.
     // Anything except `onCreateViewHolder`
    }
    
    • Case1Adapter
    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;
    }
    
    
    • Case2Adapter
    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;
    }