0

Android にはまだ新しすぎます。

私はいくつかのウィジェットを備えたクラスAを持っています

また、=>クラスBはTextViewを拡張します

クラス A はクラス B のインスタンスを使用します。

テキストがクラス B に入力されたとき、A からのウィジェットの配列を反復処理し、異なるタイプ (スピナー、テキストビューなど) であるが、共通のプロパティ setVisibility を持ち、それを変更したい

そのため、クラス A では、フィールド メンバーのクラス B を作成した後、2 つのウィジェットを含むオブジェクト配列を (クラス B に) 渡します。

だから、単純に、キャストを使用して for ループのいくつかのバリエーションを試しました (これまでのところエラーを出していないだけですが、問題があります:

        for (Object o : hidObj) 
        {

            Class c=o.getClass(); //.setVisibility=1;
            if (c.getSuperclass()==android.view.View.class){};
        }

問題: この場合、hidObj 配列には TextView と 1 つの Spinner が含まれます (これを他のアクティビティでも機能させたい)

しかしTextView:

java.lang.Object
   ↳    android.view.View
       ↳    android.widget.TextView

スピナー中:

java.lang.Object
   ↳    android.view.View
       ↳    android.view.ViewGroup
           ↳    android.widget.AdapterView<T extends android.widget.Adapter>
               ↳    android.widget.AbsSpinner
                   ↳    android.widget.Spinner

すぐにそれはうまくいきません。

Android/Java の専門家からの提案はありますか?

よろしくお願いします

デビッド

4

2 に答える 2

0

この特定のケースでは、setVisibility()呼び出したい一般的なメソッドは、ウィジェットによって継承されるため、一般的ですView。したがって、標準のJava言語と継承を活用することが期待されます。

View view;
view = findViewById(R.id.somename); // Can be any kind of View (TextView, Spinner, etc).
view.setVisibility(true); // or false depending on your needs.

ここで、階層がわからない特定のオブジェクトをチェックする場合は、リフレクションを使用する必要があります。Javaリフレクションの使用を参照してください。「名前によるメソッドの呼び出し」のセクションに興味があるでしょう。

于 2011-08-01T03:42:33.583 に答える
0
  • setVisibility はクラス View のメソッドです。
  • TextView は View を拡張します
  • スピナーはビューを拡張します

-> View の配列を渡し、配列の各項目にはメソッド setVisibility があります

キャストする必要はありません

于 2011-08-01T03:54:13.490 に答える