我正在创建一个自定义ListView,其中我有两个相同的行,一个与Spinner不同。问题是带有Spinner的行不可单击。我只能点击Spinner。这是我的适配器:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int theType = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
if (theType == 0) {
convertView = inflat.inflate(R.layout.row_item0, parent, false);
holder.textView = (TextView) convertView
.findViewById(R.id.text);
holder.sp = (Spinner) convertView.findViewById(R.id.sp);
} else if (theType == 1) {
convertView = inflat.inflate(R.layout.row_item1, null);
holder.textView = (TextView) convertView
.findViewById(R.id.text);
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String it = items.get(position);
if (it != null) {
if (theType == 0) {
holder.textView.setText(it);
holder.sp.setAdapter(new CategorySpinnerAdapter(
getApplicationContext(),
R.layout.item_spinner_category, Data.lose_weight_type));
holder.sp
.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int position, long id) {
Data.user
.setLose_weight_type(Data.lose_weight_type
.get(position));
Data.user.setGoal(Data.goals.get(0));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
} else if (theType == 1) {
holder.textView.setText(it);
}
}
return convertView;
}
答案 0 :(得分:1)
您需要在自定义列表视图的布局文件中添加android:descendantFocusability="blocksDescendants"
,或者在每个视图中添加android:focusable="false"
。如果自定义列表视图中的任何视图具有可聚焦视图,则onitemclick不起作用。
答案 1 :(得分:0)
如果适配器中包含任何可点击的小部件,如图像按钮,微调器,按钮等,则列表视图项不可单击。
您可以在适配器类本身的转换视图上执行一些可以单击侦听器的操作。这可能不是准确的方法,但这在这种情况下非常有效