我有一个适配器,它具有这样的多视图类型。
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,但这似乎不对(代码分离)
发布于 2015-03-16 17:00:34
如果您的第二个视图类型包含一个复选框或按钮,则该小部件正在从父视图中窃取焦点,并且不允许单击父视图。为了防止这种情况发生,在第二个视图类型的根布局中,应该将
android:descendantFocusability="blocksDescendants"因此,子视图不能窃取父视图的焦点。
https://stackoverflow.com/questions/29082545
复制相似问题