このサイトは初めてなので、この質問が不適切であったり、セクションが間違っていたりしたら申し訳ありません。
アンドロイド:
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]);
}
ご覧のとおり、コードの唯一の違いは、特定のコードの各部分のコンテキストに対応することです。誰が私が間違っているのか教えてもらえますか?