我有一个扩展ListFragment的Fragment,它使用自定义适配器。
ListView
的每一行都有Button
我知道Adapter
getView
方法我可以按如下方式设置按钮的监听器:
@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;
}
哪个工作正常,但是如何通知使用此适配器的片段已经点击x位置的按钮?
答案 0 :(得分:2)
首先创建一个界面:
public interface IClickListener {
public void clicked(View view,int position);
}
然后在适配器类中实例化它:
IClickListener clicListener;
public ListAdapterConstructor(Context context, Cursor c,IClickListener listener) {
super(context, c);
mContext = context;
this.clicListener = listener;
}
在按钮的click事件上设置的getView方法中:
viewHolder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clicListener.clicked(v,po);
}
});
并至少更改您的片段以实现事件侦听器:
public class YourFragment extends Fragment implements IClickListener {