我有一个具有多个视图类型的适配器
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添加到第二种视图类型但看起来不对(代码分离)
答案 0 :(得分:1)
如果您的第二个视图类型包含复选框或按钮,则该窗口小部件将从父视图中窃取焦点,并且不允许单击父视图。为了防止这种情况发生,请在第二种视图类型的根布局中添加
android:descendantFocusability="blocksDescendants"
这样儿童观点就无法窃取父母的焦点。