0

基本的に、既に持っているコードから単純なコンポーネントをカプセル化したいと考えています。

基本的にLinearLayoutはボタン付きです。これらのボタンは に変更を加えListViewます。他にもいくつかの小さな操作があります。

現在、私はそれらの XML レイアウトを持っており、ボタン、リストとその他の小さなものとの間の相互作用など、他のすべてをプログラムでセットアップしています。

明らかに、私は自分自身に考えました。これをカプセル化しましょう。

LinearLayoutを拡張してボタンを追加することから始めました。ボタンを膨張させてビューに追加する方法が既にわかりませんビューが作成される直前に、メジャーや膨張などをいじることなく、このボタンを作成するためにオーバーライドする方法は何ですか?

私は周りを見回しましたが、私が見たカスタムコンポーネントは、完全に新しいコンポーネントか、カスタムコンポーネントに小さな機能を追加しただけのコンポーネントです。

これを行うためのガイドラインはありますか?良いチュートリアル/例?

どんな助けでも大歓迎です。ありがとう !

編集:

さて、もう少し具体的な内容です。

View基本的に、 のフィルター ボタンを保持するを作成したいと考えていますListView。これは、さまざまなフィルターを使用してさまざまな場所で使用されるため、ボタンには柔軟性が必要です。

基本的には、次のようなことをしたいと思います。

CustomView view = new CustomView(activity);
view.addButton("Lala", new OnFilterClickListener { 
    onClick(ListView list, View v) {
      // Do the filtering
    }
});

mListView.addHeaderView(view);

ボタンを表示するための重みをビューに適応させ、アクティブなフィルターをユーザーに表示するなどのことをしたい。

しかし、これらの動的に追加されたボタンを表示する方法、それらをどこで生成するのか、それらを膨らませる方法などはまだよくわかりません。

4

1 に答える 1

1
public class myLayout extends LinearLayout {

    //...

    public void addButton(String text, OnClickListener listener) {
        Button newButton = new Button(mContext);
        newButton.setText(text);
        newButton.setOnClickListener(listener);
        //Say we want the weights to be equal
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1);
        addView(newButton, params);
    }

    //...

}

次のようにクリックをディスパッチする前に、ビューに対して何かを行うこともできます。

public class myLayout extends LinearLayout {

    //...

    public void addButton(String text, final OnClickListener listener) {
        Button newButton = new Button(mContext);
        newButton.setText(text);
        newButton.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                //do whatever you want
                //like change background of button or something
                //finally
                listener.onClick(v);
            }
        });
        //Say we want the weights to be equal
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1);
        addView(newButton, params);
    }

    //...

}
于 2011-10-19T13:25:08.010 に答える