再利用性を期待してカスタムビューに取り組んでいます。次のようなジェネリック型が必要です。
public class CustomViewFlipper<someType> extends ViewFlipper { }
通常のカスタム ビューを XML ファイルにバインドする方法を知っています。しかし、この状況の例は見つかりませんでした。XML でクラスのジェネリック型を定義する方法はありますか?
再利用性を期待してカスタムビューに取り組んでいます。次のようなジェネリック型が必要です。
public class CustomViewFlipper<someType> extends ViewFlipper { }
通常のカスタム ビューを XML ファイルにバインドする方法を知っています。しかし、この状況の例は見つかりませんでした。XML でクラスのジェネリック型を定義する方法はありますか?
型パラメーターは実際にはバイトコードで消去されるため、XML でクラス名をパラメーター化されていないかのように使用し、Java コードで適切なパラメーター化された型にキャストできます。
クラスを持つことを検討してください:
public class CustomViewFlipper<T extends View> extends ViewFlipper {
//...
そしてあなたの活動レイアウトxmlで:
<view
class="com.some.package.CustomViewFlipper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/customFlipper"/>
次に、あなたの活動で:
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
@SuppressWarnings("unchecked")
CustomViewFlipper<TextView> customFlipper =
(CustomViewFlipper<TextView>) findViewById(R.id.customFlipper);
そうは思いませんが、独自のサブクラスを作成できます。
public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType>
そのクラスをレイアウト XML で使用します。
私はこのアプローチを使用していますが、私にとってはうまくいきます。
<com.some.package.CustomViewFlipper
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/customFlipper"/>
そして、アクティビティで、以下のようにインスタンス化します
CustomViewFlipper<someType> customFlipper =
(CustomViewFlipper<someType>) findViewById(R.id.customFlipper)