0

I am trying to use the material dialogs library Material Dialog and i can't get the callback to work for the custom adapter. The items are displayed perfectly but on click of the items i don't get any callback.

Base Adapter

public class EcardBaseAdapter extends BaseAdapter implements View.OnClickListener {

    private LayoutInflater mInflater;
    private List<? super Greeting> items;
    private Context context;
    private final int width;
    private final int height;

    public EcardBaseAdapter(List<Greeting> items, Context context) {
        this.context = context;
        mInflater = LayoutInflater.from(context);
        this.items = items;
        final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        this.width = metrics.widthPixels;
        this.height = metrics.heightPixels;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int i) {
        return items.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view;
        ViewHolder holder;
        if (convertView == null) {
            view = mInflater.inflate(R.layout.custom_item, parent, false);
            holder = new ViewHolder();
            holder.avatar = (ImageView) view.findViewById(R.id.image_path);
            holder.name = (TextView) view.findViewById(R.id.custom_event_name);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (ViewHolder) view.getTag();
        }

        if (items.get(position) instanceof ECard) {
            ECard eCard = (ECard) items.get(position);
            Log.i("test", eCard.getImage() + "   " + eCard.getSubject());
            if (eCard.getImage() != null) {
                Glide.with(context)
                        .load(eCard.getImage())
                        .fitCenter()
                        .override(width, height / 2)
                        .into(holder.avatar);
                //holder.avatar.setImageURI(Uri.parse(eCard.getImage()));
            }
            holder.name.setTextColor(ContextCompat.getColor(context, R.color.darkGrey));
            holder.name.setText(eCard.getSubject());
        }

        return view;
    }

    @Override
    public void onClick(View view) {
        Log.i("click", "itemclick");
    }

    private class ViewHolder {
        public ImageView avatar;
        public TextView name;
    }
}

Code in the activity which uses the adapter

new MaterialDialog.Builder(birthday_details.this)
                    .title("Ecard")
                    .adapter(adapter,
                            new MaterialDialog.ListCallback() {
                                @Override
                                public void onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
                                    Toast.makeText(birthday_details.this, "Clicked item " + which, Toast.LENGTH_SHORT).show();
                                }
                            })
                    .show();
Jude Fernandes
  • 7,437
  • 11
  • 53
  • 90

1 Answers1

0

I did not understandd all your code, but I seems you never call

view.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Log.i("click", "itemclick");
    }
}; 

or in your case

view.setOnClickListener(this);
ThomasThiebaud
  • 11,331
  • 6
  • 54
  • 77