Android 使用adapter的两种回调数据方式
2016-08-31 11:48
232 查看
1、首先创建一个listView列表,用于显示数据:
item布局使用简单的一行文字显示,主要是将点击的位置回调回使用listView的类文件之中,item.xml:
2、回调数据分为两种方式,第一种是在adapter之中写一个回调接口,在点击item的时候使用接口回调,将点击的position传递给activity之中使用的adapter,在adapter中使用定义的回调方法获取到传递的position。第二种是在activity之中传递数据到adapter的时候将handler一并传进去,使用handler获取到点listView点击之时的position传递。
(1)使用接口回调:
i、自定义适配器MyAdapter:
使用自定义接口设置:
点击的时候使用接口传递数据:
ii、在MainActivity之中使用adapter:
(2)、使用Handler回调数据:
i、自定义适配器MyAdapter:
点击事件的使用:
viewHolder.textView.setOnClickListener(new OnItemChildClickListener(DELETE, position));
点击方法,将position传递到handler之中:
ii、在MainActivity之中使用adapter:
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" />
item布局使用简单的一行文字显示,主要是将点击的位置回调回使用listView的类文件之中,item.xml:
<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"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" /> </RelativeLayout>
2、回调数据分为两种方式,第一种是在adapter之中写一个回调接口,在点击item的时候使用接口回调,将点击的position传递给activity之中使用的adapter,在adapter中使用定义的回调方法获取到传递的position。第二种是在activity之中传递数据到adapter的时候将handler一并传进去,使用handler获取到点listView点击之时的position传递。
(1)使用接口回调:
i、自定义适配器MyAdapter:
public class MyAdapter extends BaseAdapter { private List<String> list; private Context context; private LayoutInflater inflater; private onClickMyTextView onClickMyTextView; public MyAdapter(Context context, List<String> list) { super(); inflater = LayoutInflater.from(context); this.list = list; this.context = context; } //接口回调 public interface onClickMyTextView{ public void myTextViewClick(int id); } public void setOnClickMyTextView(onClickMyTextView onClickMyTextView) { this.onClickMyTextView = onClickMyTextView; } @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; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (viewHolder==null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.item, null); viewHolder.textView = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(viewHolder); }else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(list.get(position).toString()); if (onClickMyTextView!=null) { viewHolder.textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onClickMyTextView.myTextViewClick(position); } }); } return convertView; } class ViewHolder{ TextView textView; } }
使用自定义接口设置:
public interface onClickMyTextView{ public void myTextViewClick(int id); } public void setOnClickMyTextView(onClickMyTextView onClickMyTextView) { this.onClickMyTextView = onClickMyTextView; }
点击的时候使用接口传递数据:
if (onClickMyTextView!=null) { viewHolder.textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onClickMyTextView.myTextViewClick(position); } }); }
ii、在MainActivity之中使用adapter:
public class MainActivity extends Activity { private ListView listView; private List<String> list; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); initData(); adapter = new MyAdapter(MainActivity.this, list); listView.setAdapter(adapter); //接口的调用,获取传递的id adapter.setOnClickMyTextView(new onClickMyTextView() { @Override public void myTextViewClick(int id) { Toast.makeText(MainActivity.this, list.get(id).toString(), Toast.LENGTH_SHORT).show(); } }); } // 列表模拟数据 private void initData() { list = new ArrayList<String>(); for (int i = 0; i < 20; i++) { list.add("添加的数据条目=" + i); } } }
(2)、使用Handler回调数据:
i、自定义适配器MyAdapter:
public class MyAdapter extends BaseAdapter { public static final String POSITION = "POSITION"; public static final int DELETE = 1; private List<String> list; private Context context; private LayoutInflater inflater; private Handler handler; public MyAdapter(Context context, List<String> list, Handler handler) { super(); inflater = LayoutInflater.from(context); this.list = list; this.context = context; this.handler = handler; } @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; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (viewHolder == null) { viewHolder = new ViewHolder(); convertView = inflater.inflate(R.layout.item, null); viewHolder.textView = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setOnClickListener(new OnItemChildClickListener(DELETE, position)); return convertView; } class ViewHolder { TextView textView; } // handler的点击事件 private class OnItemChildClickListener implements View.OnClickListener { // 点击类型索引,对应前面的CLICK_INDEX private int clickIndex; // 点击列表位置 private int position; public OnItemChildClickListener(int clickIndex, int position) { this.clickIndex = clickIndex; this.position = position; } @Override public void onClick(View v) { // 创建Message并填充数据,通过handle联系Activity接收处理 Message msg = new Message(); msg.what = clickIndex; msg.arg1 = position; Bundle b = new Bundle(); b.putInt(POSITION, position); msg.setData(b); handler.sendMessage(msg); } } }
点击事件的使用:
viewHolder.textView.setOnClickListener(new OnItemChildClickListener(DELETE, position));
点击方法,将position传递到handler之中:
// handler的点击事件 private class OnItemChildClickListener implements View.OnClickListener { // 点击类型索引,对应前面的CLICK_INDEX private int clickIndex; // 点击列表位置 private int position; public OnItemChildClickListener(int clickIndex, int position) { this.clickIndex = clickIndex; this.position = position; } @Override public void onClick(View v) { // 创建Message并填充数据,通过handle联系Activity接收处理 Message msg = new Message(); msg.what = clickIndex; msg.arg1 = position; Bundle b = new Bundle(); b.putInt(POSITION, position); msg.setData(b); handler.sendMessage(msg); } }
ii、在MainActivity之中使用adapter:
public class MainActivity extends Activity { /** * 显示数据的列表 */ private ListView listView; /** * 模拟数据的集合 */ private List<String> list; /** * 自定义的适配器 */ private MyAdapter adapter; /** * 回传回来的列表位置 */ private int mPosition; private Handler handler = new Handler() { public void handleMessage(Message msg) { // 回传的是此item的bean,对当前bean中的数据能够进行操作,位置传过来之后还能将数据进行操作 mPosition = msg.getData().getInt(MyAdapter.POSITION); switch (msg.what) { case MyAdapter.DELETE: Toast.makeText(MainActivity.this, "点击回传的是:" + list.get(mPosition), Toast.LENGTH_SHORT).show(); break; default: break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); initData(); adapter = new MyAdapter(MainActivity.this, list, handler); listView.setAdapter(adapter); } private void initData() { list = new ArrayList<String>(); for (int i = 0; i < 20; i++) { list.add("添加的数据条目=" + i); } } }
相关文章推荐
- Android异步下载网络图片&android解析xml文件的方式&使用Adapter为ListView提供数据
- Android中ListView同过自定义布局并使用SimpleAdapter的方式实现数据的绑定
- Android异步下载网络图片&android解析xml文件的方式&使用Adapter为ListView提供数据
- 使用Hibernate生成数据表的两种方式
- Android提交数据到服务器的两种方式四种方法
- Android学习之Http使用Post方式进行数据提交
- Android Canvas 两种使用方式
- android ListView布局之三(使用自定义的Adapter绑定数据,通过contextView.setTag绑定数据)有按钮的ListView
- 使用异步回调方式查询数据
- Android中Spinner下拉列表(使用自定义Adapter实现,显示数据取自联系人数据库)
- Android提交数据到服务器的两种方式四种方法
- Android中向web服务器提交数据的两种方式四种方法
- 两种方式使用android时间和日期控件
- 两种方式使用android时间和日期控件
- Android提交数据到服务器的两种方式四种方法
- MVC中使用AJAX方式调用数据(microsoft,jquery两种方式)
- [Android开发]Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- Android提交数据到服务器的两种方式四种方法
- 程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成
- Android中使用Gson解析JSON数据的两种方法