一. 首先定义一个接口interface
eg: public interface SetOnNumListener {
// 增加商品数量的回调方法
void onAddNumListener(int price,ViewHolder holder);
//减少商品数量的回调方法
void onSubNumListener(int price,ViewHolder holder);
}
二. 需要调用的地方,传递接口,调用其方法。
public class MyAdapter extends BaseAdapter {
Context mContext;
SetOnNumListener setOnNumListener; // 一般set方法 注入接口,这里简单的adapter 传参初始化了。。。
public MyAdapter(Context mContext) {
this.mContext = mContext;
setOnNumListener= (SetOnNumListener) mContext;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView=View.inflate(mContext,R.layout.item,null);
final ViewHolder holder=new ViewHolder();
holder.add = (TextView) convertView.findViewById(R.id.tv_item_add);
holder.sub = (TextView) convertView.findViewById(R.id.tv_item_sub);
holder.num = (TextView) convertView.findViewById(R.id.tv_item_num);
// “+”的监听事件
holder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 回调方法
setOnNumListener.onAddNumListener(10, holder);
}
});
// “-”的监听事件
holder.sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 回调方法
setOnNumListener.onSubNumListener(10,holder);
}
});
return convertView;
}
@Override
public int getCount() {
return 1;
}
@Override
public Object getItem(int i) {
return null;
}
}
三. 调用者实现其接口,完成回调。
public class MainActivity extends AppCompatActivity implements SetOnNumListener {
ListView mListView;
TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView= (ListView) findViewById(R.id.lv_main);
mTextView= (TextView) findViewById(R.id.tv_main);
MyAdapter adapter=new MyAdapter(this);
mListView.setAdapter(adapter);
}
/**
* 在此实现增加商品数量,并更新总价格
* @param price
* @param holder
*/
@Override
public void onAddNumListener(int price,ViewHolder holder) {
String numStr = holder.num.getText().toString();
int num=Integer.parseInt(numStr);
num++;
holder.num.setText(num+"");
int totalPrice=price*num;
mTextView.setText("结算:¥"+totalPrice);
}
/**
* 在此实现减少商品数量,并更新总价格
* @param price
* @param holder
*/
@Override
public void onSubNumListener(int price,ViewHolder holder) {
String numStr = holder.num.getText().toString();
int num=Integer.parseInt(numStr);
if(num>1){
num--;
holder.num.setText(num+"");
int totalPrice=price*num;
mTextView.setText("结算:¥"+totalPrice);
}else{
Toast.makeText(MainActivity.this, "不能再减少了", Toast.LENGTH_SHORT).show();
}
}
}
综上,就完成了一个简单回调。模拟商品++ ,--,达到数目,价格的变化。
其实,参照Android view里面的 mView.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v) { //TODO 实现接口 ........ }
}); 在setListener 的时候传递了这个接口,回调了OnClick 这一具体实现方法。