我有一个ListView,它使用不同的XML文件来创建视图和创建项目。其中一个XML文件包含RatingBar。一切都显示出来,看起来都很棒。
我正在尝试将一个onClick处理程序附加到RatingBar以启动一个新活动。我的RatingBar是style ?android:attr/ratingBarStyleSmall;所以它只是一个指示器(我想要小的RatingBar点击把用户带到一个活动,在那里他们可以做各种评级)。
我的问题是RatingBar的onClick处理程序永远不会执行。更有趣的是,我使用了相同的代码来使LinearLayout可点击,并且它工作得很好。有人能告诉我为什么吗?
我的适配器的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;
}发布于 2013-05-31 06:14:12
OnRatingBarChangeListener.,您可以尝试使用另一个可用于RatingBar的事件看这个例子,它对我很有效!
ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
viewMarketDetails(mContext);
dialog.dismiss();
}
});所以你不需要使用onClickEvent,但是你有同样的效果,当然,只有在你实际改变值的情况下才能工作。(如果单击实际值,则不起作用)
发布于 2014-11-05 16:14:06
ratingBar1.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
String rateValue = String.valueOf(ratingbar1.getRating());
System.out.println("Rate for Module is"+rateValue);
}
}); 发布于 2010-08-12 02:19:55
我已经解决了这个问题,方法是将RatingBar包装在LinearLayout中,并将onClick侦听器附加到LinearLayout。我不喜欢这样做,但它是有效的。出于某种神秘的原因,onClick不会为RatingBar执行。
https://stackoverflow.com/questions/3443939
复制相似问题