0

独自のカスタムLinearLayoutを作成しており、そのクラスを拡張するには、addviewメソッドを使用してレイアウトに子を追加する必要があります。

コンストラクターの後に設定されるタグにアクセスする必要があるので、このようなことを行うためのベストプラクティスを知る必要があります。

これが私のコードです:

public class MyLayout extends LinearLayout {

    public MyLayout(Context context) {
        super(context);


        MyTag tag = (MyTag) getTag();


        // Parent layout
        setOrientation(VERTICAL);
        setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));
        setBackgroundColor(tag.getBgColor());
    }

}
4

1 に答える 1

0

コンストラクターの後に設定されたタグにアクセスする必要があるため、このようなことを行うためのベストプラクティスを知る必要があります

コンストラクターが呼び出された後にタグを設定すると、コードは機能しませtagnull。(xml レイアウトではなく) コードでのみカスタムを使用する予定の場合は、追加のオブジェクトLinearLayoutを取得するようにコンストラクターを適応させる可能性が常にあります。MyTag

// ...
public MyLayout(Context context, MyTag theTag) {
    super(context);
    MyTag tag = theTag;
//...

もちろんMyTag、コンストラクターが呼び出された時点で有効なオブジェクトを構築できる場合( type の新しいオブジェクトをインスタンス化する場合MyLayout)、これは機能します。とにかく、コードがオブジェクトに依存している場合は、タグがまだ設定されていないときに使用できるようMyTagに、常にクラスにデフォルトのものを用意する必要があります。MyLayout

于 2012-10-12T13:49:30.987 に答える