我正在学习android / java并且有这个代码我无法开始工作:
OnRatingBarChangeListener l = new OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromTouch) {
Integer myPos=(Integer)ratingBar.getTag();
RowModel model=getModel(myPos);
model.rating = rating;
LinearLayout p=(LinearLayout)ratingBar.getParent();
TextView l=(TextView)p.findViewById(R.id.label);
l.setText(model.toString());
}
};
除了LinearLayout / getParent()向下转换外,一切正常。在运行时,它会创建一个ClassCastException。如果我注释掉那段代码,那么everthing工作正常。我错过了什么?
答案 0 :(得分:1)
好吧,ratingBar.getParent()
没有返回LinearLayout。找出ratingBar.getParent()返回的静态类型,并使用该类型的(引用)来分配。
也许您认为ratingBar
是一个LinearLayout,而您对Java优先级感到困惑?方法调用运算符.
的优先级高于强制转换运算符(type)
。这不太可能,但也许你打算这样做:
LinearLayout p=( (LinearLayout)ratingBar ).getParent();