android 获得listview里的控件的id

  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. Cursor cursor = (Cursor) listView.getItemAtPosition(position);  
  5.             String personid = 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;
                }
            });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值