帮助getParent()向下转换

时间:2010-04-28 02:54:12

标签: android

我正在学习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工作正常。我错过了什么?

1 个答案:

答案 0 :(得分:1)

好吧,ratingBar.getParent()没有返回LinearLayout。找出ratingBar.getParent()返回的静态类型,并使用该类型的(引用)来分配。

也许您认为ratingBar是一个LinearLayout,而您对Java优先级感到困惑?方法调用运算符.的优先级高于强制转换运算符(type)。这不太可能,但也许你打算这样做:

LinearLayout p=( (LinearLayout)ratingBar ).getParent();