在android开发中接口是经常见的,但是他的用法我也是最近刚掌握的,今天给大家分享下。
首先,接口是回调的,当你完成某一动作之后回调的。
我们先分析一波,回调首先需要接口,然后需要在某一动作之后调用接口的方法,接下来需要一个回调的方法。接下来就是需要在其他类中通过其调用这个类的回调的方法,把接口及其将要执行的方法传进来,完成接口的回调。
今天我就拿listview 里面的item子选项的点击举个例子吧。
当执行getview时候会给里面的控件设置监听,如下
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder = null;
if (view == null) {
viewHolder = new ViewHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item, null);
viewHolder.mTextView = (TextView) view.findViewById(R.id.item_tv);
viewHolder.mButton = (Button) view.findViewById(R.id.item_btn);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag(); }
viewHolder.mTextView.setText(mList.get(i));
viewHolder.mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemDeleteListener.onDeleteClick(i); }
});
return view; }
在监听里面执行了mOnItemDeleteListener.onDeleteClick(i);,这个方法是自己定义的一个接口,并且调用了接口的方法,但是方法未实现。
接下来 可以看下面的
public interface onItemDeleteListener { void onDeleteClick(int i); }
private onItemDeleteListener mOnItemDeleteListener;
public void setOnItemDeleteClickListener(onItemDeleteListener mOnItemDeleteListener) {
this.mOnItemDeleteListener = mOnItemDeleteListener;
}
自己定义了接口,并且写了一个setOnItemDeleteClickListener(onItemDeleteListener mOnItemDeleteListener)方法,这个方法给这个类传入了一个
onItemDeleteListener对象。
在这就要注意了,当item中的button被点击的时候执行的就是这个对象的里面的重写那个onDeleteClick方法。
所以当我们从activity中调用adapter.setOnItemDeleteClickListener(adapter.setOnItemDeleteClickListener(new MyAdapter.onItemDeleteListene() { @Override
public void onDeleteClick(int i) {
//这里就是当你点击的时候需要执行的方法
adapter.notifyDataSetChanged();
} });
的时候,就会把这个类传入adapter,所以当点击的时候,就会实现里面的方法。
完成了子item的点击。
在android开始的时候大家都会用SetOnclickListenner()吧,但是他到底是怎样实现的呢?为什么要那样写呢?参考这个,想一想也许就不知不觉想明白了。