listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,int position, long id) {
TextView tvTag=(TextView)v.findViewById(R.id.more_tools_url);
}}
标题显示为listview的选中项文字
listView.setOnItemClickListener(listener);
listView.getItemAtPosition(position) listview中的getItemAtPosition()方法解析
如果传入的是SimpleAdapter,获取到的就是一个Map<String,?>
如果传入的是SimpleCursorAdapter,获得到的就是一个Cursor,并且Cursor以指向选中的一条记录
getItemIdAtPosition(int position) |
在上面的例子中每一个ListItem都包含一个TextView与一个Button,但程序运行起来后会发现,按钮可以点击,而ListItem却无法点击,而且没有对每一个Button关联响应事件,ListItem无法点击是因为按钮抢占了ListItem的焦点,在listitem.xml而已文件中对LinearLayout加上一个属性就可解决问题:
android:descendantFocusability="blocksDescendants"
SimpleAdapter.ViewBinder binder = new SimpleAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Object data, String textRepresentation) { if (view instanceof Button) { final View button = view; // button.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher)); view.setOnClickListener(new OnClickListener() { LinearLayout listItem = (LinearLayout) button.getParent(); TextView tv = (TextView) listItem.findViewById(R.id.text); @Override public void onClick(View v) { Toast.makeText(AdapterDemoActivity.this, tv.getText(), Toast.LENGTH_SHORT).show(); } }); return false; } return false; } }; adapter.setViewBinder(binder);
系统对每一个view调用binder的setViewValue(此例中是R.id.text和R.id.button,一个TextView与一个Button),我们首先检测这个view是不是一个Button,如果是的话就关联点击事件,可能通过getParent()函数取得parentView以找到这个view的兄弟view,比如这个例子中的实现就是点击Button后输出这个Button所在的ListItem中的TextView上的文字.
在setViewValue中可以完全自定义我们的实现,比如在Button后加一个TextView,当然可以加任何View,但这样做没任何意义,当你需要这样做时你不需要用SimpleAdater而应该用BaseAdapter:
SimpleAdapter.ViewBinder binder = new SimpleAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Object data, String textRepresentation) { if (view instanceof Button) { final View button = view; LinearLayout listItem = (LinearLayout) button.getParent(); TextView textView = new TextView(AdapterDemoActivity.this); textView.setText("AA"); listItem.addView(textView,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); return false; } return false; } }; adapter.setViewBinder(binder);
listview.setAdapter(adapter);
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.order_list_item,
new String[]{"PIC", "TITLE","DESC","TAG"},
new int[]{R.id.more_tools_icon, R.id.more_tools_title,R.id.more_tools_desc,R.id.more_tools_url});
//使之可以加载图片
adapter.setViewBinder(new ViewBinder(){
public boolean setViewValue(View view,Object data,String textRepresentation){
if(view instanceof ImageView && data instanceof Bitmap){
ImageView iv=(ImageView)view;
iv.setImageBitmap((Bitmap)data);
return true;
}
return false;
}
});