Я очень новичок в Java / Android и, возможно, пытаюсь запустить его до того, как смогу ходить, но у меня был некоторый успех, начиная с версии старой игры "Угадай код". Мой текущий камень преткновения заключается в том, что, введя мое первое предположение о коде и сгенерировав счет для этого предположения, я хочу представить новый ряд «дыр», готовых принять мое следующее предположение (первый набор дыр является статическим в моем activity_main.xml
файл). У меня есть LinearLayout (вертикальная ориентация) с именем guesses
для хранения рядов отверстий, и каждый ряд отверстий представляет собой LinearLayout (горизонтальная ориентация), содержащий TextView, чтобы указать, какое это число предположений, и количество ImageViews дляпустые дырки и дырки.
Я написал код, чтобы получить макет guesses
в качестве родительского макета, создать новый горизонтальный LinearLayout и использовать addView
, чтобы добавить его в макет guesses
. Затем я переключаю свой «родительский» макет, чтобы он указывал на новый горизонтальный LinearLayout, который я только что создал, и создаю различные другие элементы TextView и ImageView и добавляю их в этот новый горизонтальный LinearLayout.
Этот код выполняется без каких-либоошибки. Я просто не вижу ни одного из моих новых макетов в интерфейсе. Что я пропустил?
Извлечение кода на данный момент:
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);
}
[Правка - следующий дополнительный вопрос можно игнорировать. Ответ получен] Этот код находится в onClickListener для моей кнопки Score
. Другая вещь, которую я хочу сделать, создав новые элементы ImageView для моих дыр в догадках, - это вызвать setOnDragListener
, чтобы использовать прослушиватель, который я определил во включающем onCreate
методе MainActivity.java
. Можно ли ссылаться на этого слушателя из кода другого слушателя? У меня есть следующее объявление на уровне класса:
ImageView guess1 = null;
... и я надеялся сделать что-то вроде
guess1 = findViewById(guessNumber*10 + 1);
guess1.setOnDragListener(MainActivity.this.guessDragListener);
, но он говорит мне, что не может решитьсимвол guessDragListener
.