Alan
Alan

Reputation: 9481

Button Click for ListViewFragment

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?

Upvotes: 0

Views: 28

Answers (1)

bryan c
bryan c

Reputation: 1366

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 {

Upvotes: 2

Related Questions