适配器中具有多个viewType的OnItemClickListener

时间:2015-03-16 16:53:31

标签: android android-listview android-adapter

我有一个具有多个视图类型的适配器

public class ListAdapter extends BaseAdapter { 
    ...
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int i) {
        return (bool()) ? 1 : 0);
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        int type = getItemViewType(i);
        if (type == 1) {
            return viewType(R.layout.list_item_ads_alert, i, view, viewGroup);
        }
        else {
            return viewType(R.layout.list_item_ads, i, view, viewGroup);
        }
    }
}

然后在我的片段中我实例化它并将其设置为listView, 加上我添加一个onItemClick监听器

ListAdapter adapter = new ListAdapter();
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Log.d("app", "pushed item " + i);
    }
});

问题是我单击第二个视图类型的项目时没有调用我的ItemClickListener,但它适用于第一个视图类型

您是否知道在这种情况下是否有针对ItemClick的特定方式? 当然我可以将onClick添加到第二种视图类型但看起来不对(代码分离)

1 个答案:

答案 0 :(得分:1)

如果您的第二个视图类型包含复选框或按钮,则该窗口小部件将从父视图中窃取焦点,并且不允许单击父视图。为了防止这种情况发生,请在第二种视图类型的根布局中添加

android:descendantFocusability="blocksDescendants"

这样儿童观点就无法窃取父母的焦点。