我对 Java/Android 很陌生,可能会在我能走路之前尝试跑步,但我从旧的“Mastermind”代码猜谜游戏的版本开始取得了一些成功。我目前的绊脚石是,在输入了我对代码的第一个猜测并生成了这个猜测的分数后,我想呈现一排新的“洞”准备接受我的下一个猜测(第一组洞在我的activity_main.xml
文件中是静态的)。我有一个称为LinearLayout(垂直方向)guesses
来保存孔的行,并且每一行孔都是一个包含TextView的LinearLayout(水平方向),以指示这是哪个猜测数字,以及空猜测孔的多个ImageView和得分孔。
我编写了代码以将guesses
Layout 作为父布局,创建一个新的水平 LinearLayout 并将addView
其添加到guesses
布局中。然后,我切换我的“父”布局以指向我刚刚创建的新水平 LinearLayout,并创建各种其他 TextView 和 ImageView 项目并将它们添加到这个新的水平 LinearLayout。
此代码全部运行没有任何错误。我只是在 UI 中看不到我的任何新布局。我错过了什么?
到目前为止的代码摘录:
parentLayout = (LinearLayout)findViewById(R.id.guesses);
LinearLayout guessLayout = new LinearLayout(MainActivity.this);
guessLayout.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
getResources().getIdentifier("@dimens/guessLayoutHeight", null, getPackageName()));
int pxMargin = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
getResources().getIdentifier("@dimens/guessLayoutMargin", null, getPackageName()),
getResources().getDisplayMetrics());
layoutParams.setMargins(pxMargin, 0, pxMargin, 0);
guessLayout.setLayoutParams(layoutParams);
guessLayout.setId(guessNumber*10);
parentLayout.addView(guessLayout);
// Add the Guess# label
parentLayout = (LinearLayout)findViewById(guessNumber*10);
TextView guessLabel = new TextView(MainActivity.this);
layoutParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 11);
layoutParams.gravity = Gravity.CENTER_VERTICAL;
guessLabel.setText("Guess " + guessNumber);
guessLabel.setLayoutParams(layoutParams);
guessLabel.setId(guessNumber*100);
parentLayout.addView(guessLabel);
// Add the guess positions
ImageView guessPosition;
pxMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());
for (int i = 1 ; i <=4 ; i++ ) {
guessPosition = new ImageView(MainActivity.this);
layoutParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 6);
if (i == 1) {
layoutParams.setMarginStart(pxMargin);
} else {
layoutParams.setMarginStart(0);
}
guessPosition.setLayoutParams(layoutParams);
guessPosition.setId(guessNumber*10 + i);
guessPosition.setImageResource(getResources().getIdentifier("@drawable/blank_guess", null, getPackageName()));
guessPosition.setTag("blank_guess");
guessPosition.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
parentLayout.addView(guessPosition);
}
[编辑-可以忽略以下附加问题。已回答] 此代码位于我的Score
按钮的 onClickListener 中。我想做的另一件事是,为我的猜测漏洞创建了新的 ImageView 项目,调用以setOnDragListener
使用我在. 是否可以从另一个侦听器的代码中引用此侦听器?我在类级别有以下声明:onCreate
MainActivity.java
ImageView guess1 = null;
...而我希望做的是
guess1 = findViewById(guessNumber*10 + 1);
guess1.setOnDragListener(MainActivity.this.guessDragListener);
但它告诉我它无法解析符号guessDragListener
。