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?
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 {