可点击的列表视图 [英] Clickable ListView

查看:20
本文介绍了可点击的列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在正在寻找解决 listView 中可点击项目的方法.

I'm looking now a few days for a solution for clickable items in a listView.

首先我遇到了这个:developer.android.com/resources/articles/touch-mode.html并发现它没有正常"的 onListItemClick() 行为.

First I came across this: developer.android.com/resources/articles/touch-mode.html and found that it's doesn't have the "normal" onListItemClick() behavouir.

然后我遇到了这段代码:http://www.androidsnippets.org/snippets/125/

// LINE 296-321

    @Override  
    protected ViewHolder createHolder(View v) {  
        // createHolder will be called only as long, as the ListView is not filled  
        // entirely. That is, where we gain our performance:  
        // We use the relatively costly findViewById() methods and  
        // bind the view's reference to the holder objects.  
        TextView text = (TextView) v.findViewById(R.id.listitem_text);  
        ImageView icon = (ImageView) v.findViewById(R.id.listitem_icon);  
        ViewHolder mvh = new MyViewHolder(text, icon);  

        // Additionally, we make some icons clickable  
        // Mind, that item becomes clickable, when adding a click listener (see API)  
        // so, it is not necessary to use the android:clickable attribute in XML  
        icon.setOnClickListener(new ClickableListAdapter.OnClickListener(mvh) {  

            public void onClick(View v, ViewHolder viewHolder) {  
                // we toggle the enabled state and also switch the icon  
                MyViewHolder mvh = (MyViewHolder) viewHolder;  
                MyData mo = (MyData) mvh.data;  
                mo.enable = !mo.enable; // toggle  
                ImageView icon = (ImageView) v;  
                icon.setImageBitmap(  
                        mo.enable ? ClickableListItemActivity.this.mIconEnabled  
                                : ClickableListItemActivity.this.mIconDisabled);  
            }  
        });  

在调试时,我注意到参数 View v 是一个 TextView 而不是普通"视图,当然:

While debugging I noticed the parameter View v is a TextView and not a "normal" View and then of course:

TextView text = (TextView) v.findViewById(R.id.listitem_text);

返回 null 并且我得到一个 NullPointerException...

returnes null and I get a NullPointerException...

有什么想法吗?我该如何解决这个问题?

Any ideas why? And how I can solve this?

提前致谢!:)

推荐答案

你如何创建 ClickableListAdapter 的实例?

How do you create your instance of ClickableListAdapter ?

当你创建你的列表适配器时,你必须传递一个资源id viewId,这应该是一个layout,稍后会被膨胀.

When you create your list adapter, you have to pass a resource id viewId, this should be a layout which will be inflated later.

public ClickableListAdapter(Context context, int viewid, List objects) {  

        // Cache the LayoutInflate to avoid asking for a new one each time.  
        mInflater = LayoutInflater.from(context);  
        mDataObjects = objects;  
        mViewId = viewid;

下面的代码对传递给构造函数的xml布局进行了膨胀,并调用了createHolder.

Below, the code inflate the xml layout passed to the constructor and call createHolder.

view = mInflater.inflate(mViewId, null);  
// call the user's implementation  
holder = createHolder(view); 

因此请确保在实例化您的 ClickableListAdapter 时,您传递的是 layout 而不是 id

So make sure that when instantiating your ClickableListAdapter, you pass a layout instead of an id

编辑您必须使用从您提供的链接中获取的以下内容创建一个 xml 布局:

Edit You have to create a xml layout with the following which is taken from the link you have provided:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content"  
  android:orientation="horizontal"  
  android:gravity="center_vertical"  
  >  

<TextView android:text="Text" android:id="@+id/listitem_text"  
            android:layout_weight="1"   
            android:layout_width="fill_parent"   
            android:layout_height="wrap_content"  
            ></TextView>  
<ImageView android:id="@+id/listitem_icon"  
            android:src="@drawable/globe2_32x32"  
            android:layout_width="wrap_content"   
            android:layout_height="wrap_content"  
            android:maxWidth="32px"  
            android:maxHeight="32px"  
            >  
</ImageView>  
</LinearLayout>

如果您在布局目录中将其命名为 mylistrow.xml,那么您将适配器构造为:

If you call it mylistrow.xml in the layout directory, so you construct your adapter as :

adapter = new MyClickableChannelListAdapter(this, R.layout.mylistrow, channelList); 
setListAdapter(adapter);

这篇关于可点击的列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆