2

このサイトは初めてなので、この質問が不適切であったり、セクションが間違っていたりしたら申し訳ありません。

アンドロイド:

View を拡張して問題なく動作するカスタム ボタン クラスを作成しました。ここで、特定の方法で配置されたこれらのカスタム ボタンのいくつかを使用する数字キーパッド クラスを作成したいと考えています。これを電話ダイヤラー アプリで使用できます。アプリのメイン アクティビティ内からキーパッドを作成できます。問題ないようですが、このキーパッドを独自のクラス内に作成して、簡単に再利用できるようにしたいと考えています。コードを独自のクラスに移動すると、エラーが発生するか、画面に何も表示されません。問題の一部は、子ビューが追加されているクラスだと思います。

メインアクティビティのコードは次のとおりです。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(1);
    LcarsButton numericPad[] = new LcarsButton[10]; //array of buttons

    LinearLayout rows[] = new LinearLayout[3];

    for(int i=0;i<=2;i++)
    {
        rows[i] = new LinearLayout(this);
        for(int j=1;j<=3;j++)
        {
            int k = (i * 3) + j;
            numericPad[k] = new LcarsButton(this);
            numericPad[k].label = "" + k;
            rows[i].addView(numericPad[k]); 
        }
        layout.addView(rows[i]);
    }

配列 numericPad をループし、3 つのボタンを各「行」に割り当て、次に 3 つの「行」を「レイアウト」に割り当てます。これはうまくいきます。クラスコンストラクターに表示されるコードは次のとおりです。

    public class LcarsNumPad extends LinearLayout {

    public LcarsNumPad(Context context) {
    super(context);
    this.setOrientation(VERTICAL);

    LinearLayout layout = new LinearLayout(context);
    LcarsButton numericPad[] = new LcarsButton[10];


    layout.setOrientation(1);
    LinearLayout rows[] = new LinearLayout[3];

    for(int i=0;i<=2;i++)
    {
        rows[i] = new LinearLayout(context);
        for(int j=1;j<=3;j++)
        {
            int k = (i * 3) + j;
            numericPad[k] = new LcarsButton(context);
            numericPad[k].label = "" + k;
            rows[i].addView(numericPad[k]); 
        }
        layout.addView(rows[i]);
    }

ご覧のとおり、コードの唯一の違いは、特定のコードの各部分のコンテキストに対応することです。誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

0

layoutエラーの理由は、で定義されている変数を使用しているためだと思いますonCreate()。配列をメイン アクティビティに渡す必要がありrows、そこからレイアウトに追加できます。

于 2012-06-20T09:36:27.277 に答える