【发布时间】:2011-03-27 12:21:37
【问题描述】:
我有一个 ListView,它使用不同的 XML 文件来创建视图和制作项目。这些 XML 文件之一包含 RatingBar。一切显示和看起来都很棒。
我正在尝试将 onClick 处理程序附加到 RatingBar 以启动新活动。我的 RatingBar 风格为 ?android:attr/ratingBarStyleSmall;所以它只是一个指标(我希望点击小的 RatingBar 将用户带到他们可以进行各种评分的活动)。
我的问题是 RatingBar 的 onClick 处理程序永远不会被执行。更有趣的是,我使用相同的代码来制作可点击的 LinearLayout 并且它工作正常。谁能告诉我为什么?
我的 Adapter 的 getView 如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
// get the View for this list item
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch (type) {
// ...
case TYPE_LOOKUP:
v = vi.inflate(R.layout.layout_itemlist_itemlookup, parent, false);
LinearLayout vLookup = (LinearLayout)v.findViewById(R.id.itemlist_lookup);
if (vStore != null) {
vStore.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// THIS HANDLER WORKS FINE
Intent intentLaunchLookup = new Intent(ActivityItemList.this, ActivityLookup.class);
startActivity(intentLaunchLookup);
}
});
}
break;
case TYPE_SEPARATOR:
v = vi.inflate(R.layout.layout_itemlist_itemseparator, parent, false);
RatingBar r = (RatingBar)v.findViewById(R.id.itemlist_rating);
if (r != null) {
r.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// THIS HANDLER DOES NOT GET EXECUTED (r IS NOT NULL; SO THIS SHOULD HAVE BEEN CREATED)
Intent intentLaunchRating = new Intent(ActivityItemList.this, ActivityRating.class);
startActivity(intentLaunchRating);
}
});
}
break;
// ...
}
}
// …
// return the created view
return v;
}
【问题讨论】:
-
有人在这方面有任何额外的 cmets 吗?我仍然无法执行 onClick 处理程序。如您所见,我对 LinearLayout 使用相同的代码,它工作正常。我的 RatingBar 设置为可点击。我在 onClick 侦听器中为 LinearLayout 和 RatingBar 设置了断点,并且只有 LinearLayout 处理程序被执行。注意:RatingBar 不在 LinearLayout 内。如您所见,它们位于两个不同的 XML 文件中。