在安卓系统中,onListItemClick方法无法被调用?

3

我有一个ListView和自定义布局,其中包含TextView、ImageView和ImageButton。我希望我的ImageButton的行为类似于RadioButton。但是我的onListItemClick事件没有被调用。

public class MyListAdapter extends BaseAdapter {

    Context context;
    ArrayList<String> text;
    ArrayList<String> Count;

    int count;

    public MyListAdapter(Context ctx, ArrayList<String> text, ArrayList<String> Count) {
        this.context = ctx;
        this.textAnswers = text;
        this.optionCount = Count;
    }

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

    @Override
    public Object getItem(int position) {
        return position;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.custom_layout, null);
        }

        ImageButton choice = (ImageButton)convertView.findViewById(R.id.ImageButton);
        if(imageChoice != null) {
            choice.setImageResource(R.drawable.radio_unselected);

        }

        TextView txt = (TextView)convertView.findViewById(R.id.TextView);
        txt.setText(Count.get(position));

        TextView txtText = (TextView)convertView.findViewById(R.id.TextViewAnswer);
        txtText.setText(textAnswers.get(position));

        return convertView;
    }
}

我的onListItemClick如下:

@Override
protected void onListItemClick(ListView listView, View v, int position, long id) {
    super.onListItemClick(listView, v, position, id);
    ImageButton choice = (ImageButton)v.findViewById(R.id.ImageButton);
    choice.setImageResource(R.drawable.radio_selected); 
}

现在请任何人帮我将我的imagebutton的行为设置成类似于radiobutton的行为。最重要的是,我的onListItemClick没有被调用。 此外,我已经在我的custom_layout中将所有控件的android:focusable="false" android:focusableInTouchMode="false" android:clickable="false"设置好了。 提前致谢。


你调用了 setOnItemClickListener 吗? - MByD
@MByD 我没有调用 setOnItemClickListener,我需要吗? - Panache
1
是的,你需要将它设置为监听器,否则它怎么会被调用呢? - MByD
我的Activity扩展了ListActivity。所以我认为我的onListItemClick应该适用于这个?而且,我的列表是android:id="@id/android:list"。请问您能否提供一些示例,以便我可以更清楚地了解。 - Panache
请发布您的活动代码,ListAdapter 不那么重要。 - MByD
显示剩余2条评论
4个回答

2
如果您的活动是ListActivity且列表视图的ID = @android:id/list,则无需设置侦听器即可调用onListItemClick。

是的,因为我在另一个活动中有一个带有简单适配器的列表,在那里我的onListItemClick被调用了。但是为什么对于使用BaseAdapter的列表它没有被调用呢? - Panache
如果我从自定义布局中删除图像按钮,则会调用onListItemClick。现在我错过了什么关于imagebutton? - Panache

2

如果您没有在主活动中为ListView添加setOnItemClickListener,那么您将永远不会收到itemClick的调用。您需要按照以下方式进行操作:

例如:

OnCreate()方法:

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

lv.setOnItemClickListener(this);

// 创建以下方法并让活动实现onitemclicklistener

public void onItemClick(AdapterView<?> a, View v, int position, long id) {
//set action here
 }

那应该可以工作 :)

1
你可能需要在列表项视图中设置 android:descendantFocusability="blocksDescendants"。这对我解决了问题。
...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:descendantFocusability="blocksDescendants">
...

0

在 ImageButton 的 XML 中设置这些值,然后它应该可以工作了。

android:focusable="false"
android:focusableInTouchMode="false"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接