1.实现内部监听回调
public interface OnButtonClickListener {// 1.0定义按钮接口
public void onButtonClick(int position, Button button);// 设置一个方法,Activity调用时可以获取按钮对象和按钮位置
}
private OnButtonClickListener buttonClickListener;//2初始化监听器
public void setButtonClickListener(OnButtonClickListener buttonClickListener) {//3提供Set方法让Activity调用
this.buttonClickListener = buttonClickListener;
}
private OnClickListener btnClickListener = new OnClickListener() {//4创建系统点击监听事件
public void onClick(View v) {
if (buttonClickListener != null) {//5如果自定义监听器不为空,则调用
int position = (Integer) v.getTag();
Button button = (Button) v;
buttonClickListener.onButtonClick(position, button);
}
}
};
最后在关键地方调用监听器,让Activity实现接口
public class MyListVewAdapter extends MyBaseAdapter {
private List<String> stringList;
public MyListVewAdapter(Context context, List list) {// 1.0构造函数--适配器一般传入3个参数
super(context, list);
this.stringList = list;
}
class HolderView {// 2.0缓存优化HolderView
public TextView textView;
public Button btn;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {// 3.0重写该方法
HolderView holder = null;
if (convertView == null) {
holder = new HolderView();
convertView = View.inflate(context, R.layout.item, null);
holder.textView = (TextView) convertView.findViewById(R.id.list_text);
holder.btn = (Button) convertView.findViewById(R.id.list_btn);
convertView.setTag(holder);
} else {
holder = (HolderView) convertView.getTag();
}
holder.textView.setText(stringList.get(position)+"文本");
holder.btn.setText(stringList.get(position));
holder.btn.setTag(position);
holder.textView.setTag(position);
holder.btn.setOnClickListener(btnClickListener);//4.6设置监听器,让Activity调用
holder.textView.setOnClickListener(txtClickListener);
return convertView;
}
// 因为Listview有2个子控件按钮和文本框..所以设置2个监听事件...
// ----------------------------------按钮监听--回调---------上------------
public interface OnButtonClickListener {// 4.0定义按钮接口
public void onButtonClick(int position, Button button);// 4.1设置一个方法,Activity调用时可以获取按钮对象和按钮位置
}
private OnButtonClickListener buttonClickListener;//4.2初始化监听器
public void setButtonClickListener(OnButtonClickListener buttonClickListener) {//4.3提供Set方法让Activity调用
this.buttonClickListener = buttonClickListener;
}
private OnClickListener btnClickListener = new OnClickListener() {//4.4创建系统点击监听事件
public void onClick(View v) {
if (buttonClickListener != null) {//4.5如果自定义监听器不为空,则调用
int position = (Integer) v.getTag();
Button button = (Button) v;
buttonClickListener.onButtonClick(position, button);
}
}
};
// ----------------------------------按钮监听--回调----------下--------------
// ----------------------------------文本监听--回调---------上------------
public interface OnTextViewClickListener {// 5.0定义接口-----同上4.0的方法
public void onTextViewClick(int position, TextView textView);
}
private OnTextViewClickListener onTextViewClickListener;
public void setOnTextViewClickListener(OnTextViewClickListener onTextViewClickListener) {
this.onTextViewClickListener = onTextViewClickListener;
}
private OnClickListener txtClickListener = new OnClickListener() {
public void onClick(View v) {
if (onTextViewClickListener != null) {
int position = (Integer) v.getTag();
TextView textView = (TextView) v;
onTextViewClickListener.onTextViewClick(position, textView);
}
}
};
// ----------------------------------按钮监听--回调----------下--------------
}
public abstract class MyBaseAdapter<T, Q> extends BaseAdapter {
public Context context;
public List<T> list;//
public Q view; //��GridView,CustomListView
public MyBaseAdapter(Context context, List<T> list, Q view) {
this.context = context;
this.list = list;
this.view = view;
}
public MyBaseAdapter(Context context, List<T> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
public class MainActivity extends Activity {
private MyListVewAdapter adapter;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.activity_main);
ListView mList = (ListView) findViewById(R.id.list);// 1.0初始化控件
List<String> mDatas = new ArrayList<String>();// 2.0假数据
for (int i = 0; i < 20; i++) {
mDatas.add("测试数据" + i);
}
adapter = new MyListVewAdapter(context, mDatas);// 适配器
mList.setAdapter(adapter);
adapter.setButtonClickListener(new OnButtonClickListener() {// 底部适配器实现了Listview-Button的监听
public void onButtonClick(int position, Button button) {
Toast.makeText(context, "按钮值:" + button.getText(), 0).show();
}
});
adapter.setOnTextViewClickListener(new OnTextViewClickListener() {// 底部适配器实现了Listview-TextView的监听
public void onTextViewClick(int position, TextView textView) {
Toast.makeText(context, "文本值:" + textView.getText(), 0).show();
}
});
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:id="@+id/list_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable = "false"
/>
<TextView
android:clickable="true"
android:id="@+id/list_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="yuan"
/>
</LinearLayout>