小试一下自定义接口的使用
来源:互联网 发布:windows 相对路径 编辑:程序博客网 时间:2024/04/29 15:10
在Android中接口有很多的用处,接口的具体定义和使用场景就不多说了,网络多的是。
这里提供一个使用场景:一个页面中有一个ListView,每个条目都可以点击,点击时删除一个条目,当条目被删除完的时候,显示一个图片或者一个提示性的语句。
代码很简单,就一个MainActivity,一个adapter,这里是这样使用的:
MainActivity的代码:
package com.example.text;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.text.MyAdapter.OnListener;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> s = new ArrayList<String>();
for (int i = 0; i < 3; i++) {
s.add("哥哥你好" + i);
}
ListView listView = (ListView) findViewById(R.id.list);
final TextView tv = (TextView) findViewById(R.id.tv);
MyAdapter adapter = new MyAdapter(s, this);
// 借口是在adapter中定义的,所以用adapter来使用接口,即setOnListener();
adapter.setOnListener(new OnListener() {
// 实现接口的方法,在该方法中写具体的逻辑,比如这里就只是让xml布局中本来隐藏的TextView显示出来
@Override
public void listener(int size) {
tv.setVisibility(View.VISIBLE);
Toast.makeText(MainActivity.this, size + "aa", Toast.LENGTH_SHORT).show();
}
});
listView.setAdapter(adapter);
}
}
adapter的二代码如下:
package com.example.text;
import java.util.ArrayList;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import com.example.text.R.layout;
public class MyAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> s;
public MyAdapter(ArrayList<String> s, Context context){
this.context = context;
this.s = s;
}
@Override
public int getCount() {
return s.size();
}
@Override
public Object getItem(int arg0) {
return s.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(final int position, View arg1, ViewGroup arg2) {
View view = View.inflate(context, layout.item, null);
TextView text = (TextView) view.findViewById(R.id.text);
Button button = (Button) view.findViewById(R.id.button);
text.setText(s.get(position));
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
s.remove(position);
notifyDataSetChanged();
System.out.println("mOnListener = " + mOnListener);
if(s.size() == 0){
if(mOnListener != null){
mOnListener.listener(position);
}
}
}
});
return view;
}
// 定义一个借口
public interface OnListener{
void listener(int size);
}
// 用成员变量记录传进来的listener
public OnListener mOnListener;
// 提供其他类设置listener的方法,类似button的setOnClickListener()方法
public void setOnListener(OnListener onListener){
// 把传进来的listener赋值给成员变量用以记录
this.mOnListener = onListener;
}
}
这里自定义接口的思路是:
需要在Activity中改变TextView的显示与否,所以需要在这里setOnListener,因为是在点击item中button时,如果是点击取消最后一条,则应该显示文字提示,所以
自定义接口写在了adapter中,activity一调用setOnListener,则adapter中的public void setOnlistener(....)方法就传进来了listener,再把这个值赋值给成员变量记录,
成员变量有了值,就可以调用接口中的onListener方法了,调用该方法需要合适的时机,这里就是在点击取消的button中调用的。
我的使用场景是:有一个关注列表,每个item都可以点击取消关注,如果没有了关注,则显示一个图片和一个文字提示,这里当取消关注成功后,并且此时已经没有了关注,
则利用接口回调的方式进行处理。因为这种场景还是挺常见的,而且我用的都是这种方式(也不知道好不好),所以就简单的写了下。写的不好请见谅!!!
- 小试一下自定义接口的使用
- 自定义适配器接口的使用
- 整理一下最近的收获,java中接口的使用
- 小试一下dom4j,挺方便的
- 小试了一下baidu的blog
- 记录一下使用git遇到的一个小问题
- webos小试一下
- 小试一下
- 小试一下
- 使用开放的showapi接口小技巧
- 整理了一下,真正可用的免费的https、http接口,测试接口可以使用
- 简单的实现一下自定义圆然后平移的小动画
- 使用va_list自定义print的小例子.
- 总结一下使用Swift遇到的几个小问题和几个小知识点
- 第一次写,小试一下
- Android Fragment小试一下
- 接口的小例子
- 接口的小应用
- Rxjava 7
- 201403-4无线网络
- Rxjava 8
- 设计模式之策略模式
- 动态规划-背包问题
- 小试一下自定义接口的使用
- 如何使用——折半查找
- javascript:;与javascript:void(0)与#
- 161005
- CentOS6.5+JDK+Tomcat+Mysql+Nginx负载均衡+Redis环境部署
- 留言板问题
- invalidate()和postInvalidate()的使用与区别
- POJ 1141Brackets Sequence (区间dp记录路径)
- 信号量深入理解,疑问解答