自定义适配器中的Android ListView项目无法选择

时间:2010-07-01 17:58:38

标签: android

我正在制作一个自定义适配器,以便我可以显示带有图标的项目列表,这些图标看起来就像长按主屏幕时出现的菜单。

由于某些原因,列表项不可点击。可以使用D-pad导航到它们,但不能以任何方式单击它们。我想也许问题出在我使用的AlertDialog上,所以我更换了我在其他地方使用的工作适配器,但我有同样的问题。

我的适配器看起来像这样:

ArrayList<IconListItem> mItems;
LayoutInflater mInflater;

public IconListAdapter(Context context, ArrayList<IconListItem> items) {
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mItems = items;
}

public IconListAdapter(Context context) { 
    this(context, new ArrayList<IconListItem>()); 
}

public void add(IconListItem item) {
    mItems.add(item);
    notifyDataSetChanged();
    return item;
}

public void remove(IconListItem item) {
    mItems.remove(item);
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public IconListItem getItem(int position) {
    return mItems.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if(convertView == null){
        view = mInflater.inflate(R.layout.two_line_icon_list_item, null);
    } else {
        view = convertView;
    }


    IconListItem item = mItems.get(position);
    TextView lineOne = (TextView) view.findViewById(R.id.firstLine);
    TextView lineTwo = (TextView) view.findViewById(R.id.secondLine);
    ImageView iconImage = (ImageView) view.findViewById(R.id.icon);

    lineOne.setVisibility(View.VISIBLE);
    lineTwo.setVisibility(View.VISIBLE);
    iconImage.setVisibility(View.VISIBLE);

    lineOne.setText(item.getText());

    if (item.getSubtext() == null)
        lineTwo.setVisibility(View.GONE);
    else 
        lineTwo.setText(item.getSubtext());



    if (item.getIcon() == null)
        iconImage.setVisibility(View.GONE);
    else 
        iconImage.setImageDrawable(item.getIcon());


    return view;
}

它正在膨胀的XML:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="6dip"
>
    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="6dip"
    />
    <LinearLayout
        android:orientation="vertical"  
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:layout_height="fill_parent"
    >
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:id="@+id/firstLine"
            android:ellipsize="marquee"
            android:inputType="text"
        />
        <TextView  
            android:layout_width="wrap_content"
            android:layout_height="0dip"
            android:layout_weight="1"          
            android:ellipsize="marquee"
            android:id="@+id/secondLine"
            android:inputType="text"
        />           
    </LinearLayout>
</LinearLayout>

编辑:

当我说它们不可点击时,我的意思是当我按下它们时它们的项目不会以橙色突出显示,也不会被onItemClick调用。

在我的代码中,我有这个,一个不同的适配器用于其他目的,它完美地运行

this.foos= foos;
fa = new FooAdapter(this.foos);
fooList.setAdapter(fa);

// View the details for an item when it is selected
fooList.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        Intent i = new Intent(MyActivity.this, MyOtherActivity.class);
        i.putExtra("foo", ((fooAdapter)arg0.getAdapter()).getItem(arg2));
        i.putExtra("list_position", arg2);
        MyActivity.this.startActivityForResult(i, 0);
    }
});

但是当我换掉

的前3行时
IconListAdapter ila = new IconListAdapter(this);
ila.add(0, "Test 1", android.R.drawable.ic_menu_mylocation);
ila.add(0, "Test 2", android.R.drawable.ic_menu_edit);
ila.add(0, "Test 3", android.R.drawable.ic_menu_search);
groupList.setAdapter(ila);

它停止工作。

3 个答案:

答案 0 :(得分:1)

我发现了问题。我逐个删除了布局文件中的行,直到找到原因。

引起问题的行是两行android:inputType="text"。它们一定是导致系统认为两个TextView是输入。我将其更改为android:inputType="none",现在可以正常使用。

如果提出单一线条的大型工具提示已被弃用,那肯定会很好。

答案 1 :(得分:0)

花了几个小时后,我发现如果在列表中的任何文本视图上设置了此属性,则listview项目将无法选择:

android:textIsSelectable="true"

答案 2 :(得分:-1)

您需要实施setOnItemClickListener,当您点击ListView中的某个项目时,系统会调用该{{3}}。

这样的事情:

ListView lv = (ListView)findViewById(R.id.your_list_view);

lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
        Log.v(TAG, "Item clicked");
        // whatever you want to do with the clicked item...
    }
});