質問

現在、アクティビティを拡張しているクラスがあり、FindViewByID、ArrayAdapterなどの方法があります。独立したクラスに変えたいのですが、上記の方法はすべて定義されていません。何が問題ですか?クラスをインポートするだけで十分ではありませんか?たとえば、FindViewByIDのAndroid.view.viewをインポートしますが、それでも違いはありません。お知らせ下さい。

役に立ちましたか?

解決

アクティビティのインスタンスをこのようなコンストラクターの2番目のクラスに渡す必要があります。

あなたの中で Activity このようにクラスを導入してください:

MyClass instance = new MyClass(this);

そして、あなたのセカンドクラスで、 コンストラクタ このようになります:

public class MyClass {

public Activity activity; 
//.... other attributes 

public MyClass( Activity _activity){

   this.activity = _activity;
//other initializations...

}
}

そして、あなたが使用したいとき findViewById() 方法、あなたはこれを好きになることができます:

EditText txt = (EditText)this.activity.findViewById(R.id.txt);

他のヒント

属する関数を呼び出したい場合 Activity 次に、あなたが持っている必要があるのは、 Activity.

例えば。

class A extends Activity {
    Context ctx;

    void onCreate(Bundle b)
        ctx = this;
        B bob = new B(ctx);
    }
}

これがクラスBです。

class B {

    B (Activity a) {
        a.anyFunctionOfActivity();
    }
}

FindViewByID の非静的な公共方法です Activity クラスなので、aでのみ利用可能です Activity 物体. 。したがって、インポート android.view.Viewandroid.app.Activity 利用できません。それを利用できるようにするために、あなたは Actvity オブジェクト - 通常は this あなたの活動を指してください。ただし、UIスレッドで常にビューを更新する必要があることに注意してください。

以下を試してください:

public static View getLayoutByRes(@LayoutRes int layoutRes,@Nullable ViewGroup viewGroup)
{
    final LayoutInflater factory = getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return factory.inflate(layoutRes, viewGroup);
}

TextView tv = (TextView) getLayoutByRes(R.layout.xxx ,Null).findViewById(R.id.editd);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top