1

画面上で動的に膨張しているレイアウトファイルがあります。次に、アクティビティでいくつかの UI ロジック (リスナーなど) を初期化する必要があります。

しかし、このロジックを何らかのクラスに移動する必要があります。また、xml でレイアウトされたビュー ベースのオブジェクトを作成するのに最適な方法を判断できません。

public MyView extends View {
    MyView(Context context) {
        super(context);
        //inflation here...        
    }

また

MyViewFactory {
    View get(Inflater inflater) {

    }

または、他の何か?

誰かがどこを探すべきかソースコードを推薦できるかもしれません。

4

1 に答える 1

3

おそらく、ImageView のような単純なビューでこれを行いたくないでしょう。(ボタンなどを含む線形レイアウト)のようなより複雑なレイアウトにしたいですか?

ImageView img = new ImageView(context);最初のものが必要な場合は、xml で設定する方が簡単だと思う場合は、より多くのパラメーターが含まれている場合は、ファクトリのような単純なビュー インスタンスを使用するのが最適です。

より複雑なレイアウトに関する限り、viewGroups の一部を拡張するカスタム クラスを使用することを好みます( Like: MyView extends LinearLayout )

という関数を作成します。init();

各コンストラクターから関数を呼び出す

その中に次のように実装します。

LayoutInflater.from(context).inflate(R.layout.my_layout,this,true);

this + trueは、レイアウトがルートにアタッチされることを意味します。この場合、linearLayout であり、ビューグループで直接 findViewById を使用できます)。

ImageView img = findViewById(R.id.myView);

カスタム ビューには常に固有のロジックが含まれており、再利用でき、カスタム ビューを含むアクティビティから呼び出すいくつかのパブリック メソッドも公開されているため、カスタム ビューを作成することは非常に重要です。

于 2012-07-17T14:52:12.893 に答える