1

私のプロジェクト(B)には、(直接ではなく)ScrollView(A)を拡張するクラスがあり、これを使用して、垂直な月フィールドスクロールに値を設定できます

継承階層は次のとおりです。 B は、A を拡張する抽象クラス E を拡張する D を拡張します。

scrollviews(ArrayList) の ArrayList を返す現在のアクティビティのすべてのスクロール ビューを取得する robotium メソッドを使用しています。

その配列リスト ArrayList.get(0) の最初の要素を割り当てようとしており、次のようにして B オブジェクトにキャストしようとしています。

ScrollView scrview =  new ScrollView(a.getApplicationContext());
ChildScrollView scrview1 = new ChildScrollView(a.getApplicationContext());

scrview = solo.getScrollViews().get[0];
scrview1 = (ChildScrollView) scrview; // I get the classcastexception here

これを回避する方法はありますか?

私も試しました

ChildScrollView scrview1 = new ChildScrollView(a.getApplicationContext());
ScrollView scrview =  (ScrollView)new childScrollView(a.getApplicationContext());
//Also tried this --> ScrollView scrview = (ScrollView) scrview1;

scrview = solo.getScrollViews().get[0];
scrview1 = (ChildScrollView) scrview; // I get the classcastexception here

どんな助けでも大歓迎です。何か不足している場合はお知らせください。

4

1 に答える 1

2

キャストがそのように機能しないため、例外が発生しています。このように考えてみてください: すべてChildScrollViewはまたであるため、コンテキストでScrollViewそれらを使用することは理にかなっています。ScrollViewただし、ScrollViewオブジェクトは である場合とそうでない場合がありますChildScrollView

リフレクションを使用して、キャストが安全であることを確認するために、キャストする前に実行時にオブジェクトのクラスを決定しようとすることができます。ただし、上記のコードで何を達成しようとしているのかわかりません。によって参照される新しいオブジェクトを作成しましたscrview1が、すぐにその変数をscrview?に割り当てます。達成したいことについて、さらに詳細を教えていただけますか?

于 2012-07-26T21:52:05.497 に答える