1. ListView lstres = (ListView)findViewById(R.id.ListView);

  2. for (int i = 0; i < lstres.getChildCount(); i++)

  3. {

  4. RelativeLayout ll = (RelativeLayout)lstres.getChildAt(i);// 获得子级

  5. ImageView= (ImageView) ll.findViewById(R.id.image);// 从子级中获得控件

  6. }


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的选中项文字

OnItemClickListener listener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
setTitle(parent.getItemAtPosition(position).toString());//它确实可以获得每个选中后的item中的文字
}
};

listView.setOnItemClickListener(listener);


  1. listView.getItemAtPosition(position) listview中的getItemAtPosition()方法解析

  2. 官方的API解析是:获取相关的数据列表中指定位置。它返回的是一个对象,

  3. 调用ListView的getItemAtPosition(int)方法可以获取封装数据的容器

    如果传入的是SimpleAdapter,获取到的就是一个Map<String,?>

    如果传入的是SimpleCursorAdapter,获得到的就是一个Cursor,并且Cursor以指向选中的一条记录


  4. Cursorcursor=(Cursor)listView.getItemAtPosition(position);
  5. Stringpersonid=String.valueOf(cursor.getInt(cursor.getColumnIndex("_id")))

    2:listView
    getItemIdAtPosition(int position)
    刚应该是返回一个ID号




在上面的例子中每一个ListItem都包含一个TextView与一个Button,但程序运行起来后会发现,按钮可以点击,而ListItem却无法点击,而且没有对每一个Button关联响应事件,ListItem无法点击是因为按钮抢占了ListItem的焦点,在listitem.xml而已文件中对LinearLayout加上一个属性就可解决问题:

    android:descendantFocusability="blocksDescendants"
我们对ListItem的自定义是通过对SimpleAdapter设置ViewBinder来实现的
        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);
http://www.189works.com/article-51511-1.html



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;
}
});

更多相关文章

  1. Android(安卓)按钮控制ViewPager左右翻页
  2. Android程序开发的环境配置
  3. Android中读取中文字符的文件与文件读取相关
  4. 限制EditText输入文字的数目
  5. vue判断手机类型是安卓、微信或IOS
  6. Android的简单的广播的例子
  7. Android(安卓)EditText 属性汇总
  8. Android左右连接和USING
  9. android中自己画一个按钮,和自己设置一个框框

随机推荐

  1. android Spinner默认不选中
  2. Android(安卓)Dalvik虚拟机内存分配问题
  3. Android(安卓)Gallery实现苹果的coverflo
  4. Android(安卓)子布局不超过父布局 圆角
  5. 【读书笔记】Android(安卓)应用程序进程
  6. Android(安卓)Launcher开发(二)AppWidget
  7. Android暑期实习面经部分笔试记录(一)
  8. Android(安卓)Gallery3D源码分析(一)
  9. Android(安卓)SystemUI源码分析与修改
  10. 【Android学习】Day 1