0

I have a Fragment that extends ListFragment which uses a custom Adapter.

Each row of the ListView has a Button and I know in the Adapter

getView method I can set a listener for the button as follows:

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

    ViewHolder viewHolder; //View lookup cached stored in tag.
    if(convertView == null){
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.pay_debit_credit_item, parent, false);
        viewHolder.makePayment = (Button) convertView.findViewById(R.id.paymentButton);
        viewHolder.makePayment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "Hellooo", Toast.LENGTH_SHORT).show();
            }
        });
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    //...
    //Return view to be rendered.
    return convertView;
} 

Which works fine, but how do I notify the Fragment that is using this adapter that the button at position x has been clicked?

Alan
  • 9,331
  • 14
  • 52
  • 97
  • 1
    You should take a look at this [How to create interface between Fragment and adapter?](http://stackoverflow.com/a/15444411/1893220) – florian-do Apr 07 '16 at 15:37

1 Answers1

2

first create an interface :

public interface IClickListener {
    public void clicked(View view,int position);
}

then instantiate it in your adapter class:

IClickListener clicListener;
    public ListAdapterConstructor(Context context, Cursor c,IClickListener listener) {
        super(context, c);
        mContext = context;
        this.clicListener = listener;
    }

in getView method set on click event for button:

viewHolder.button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                clicListener.clicked(v,po);
                }
        });

and at least change your fragment to implement event listener:

public class YourFragment extends Fragment implements IClickListener {
bryan c
  • 1,366
  • 10
  • 14
  • ahh.. I have been using interfaces for Fragment to Activity interactions, but didn't connect the dots for using interfaces for Adapter to Fragment interaction. Thank you! – Alan Apr 07 '16 at 15:53