Найти дочернего элемента LinearLayout внутри LinearLayout - PullRequest
0 голосов
/ 06 июня 2018

У меня есть LinearLayout ("ll"), который уже создан в xml, и приложение динамически создает еще один LinearLayout внутри него и создает EditText и Button внутри этого представления.Кнопка заставляет весь LinearLayout уничтожать себя вместе с EditText и Button внутри него (вся система - это имя игрока, которое вводит действие).Во всяком случае, я пытаюсь найти способ получить текст из всех EditTexts.Я попытался использовать цикл for для "ll" и использовать ll.getChildAt(), но я не могу использовать .getChildAt() для того, что генерирует ll.getChildAt(), потому что getChildAt() генерирует "View", а не "LinearLayout".Мне просто нужен способ найти двух детей, а не одного.Кроме того, если есть лучший способ сделать это, дайте мне знать.Я открыт для предложений.

Вот мой код, если он поможет:

NewGameCreate.java

public class NewGameCreate extends Activity {

int numOfPlayers = 0;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_game_create);
}

public void newPlayer(View view) {
    numOfPlayers++;
    final LinearLayout ll = findViewById(R.id.playerView);
    final LinearLayout llNew = new LinearLayout(getApplicationContext());
    llNew.setOrientation(LinearLayout.HORIZONTAL);
    llNew.setId(numOfPlayers);
    ll.addView(llNew);

    EditText newName = new EditText(this);
    newName.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1));
    newName.setHint("Enter Player Name");
    newName.setId(numOfPlayers);
    newName.setWidth(0);
    llNew.addView(newName);

    final Button delete = new Button(this);
    delete.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0));
    delete.setText("Delete");
    delete.setId(numOfPlayers);
    delete.setWidth(0);
    delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int id = delete.getId();
            ll.removeViewInLayout(findViewById(id));
            Drawable back = ll.getBackground();
            ll.setBackgroundColor(00000000);
            ll.setBackground(back);
            ll.invalidate();
        }
    });
    llNew.addView(delete);
}

public void startGame(View view){
    LinearLayout ll = findViewById(R.id.playerView);
    List text = new ArrayList();

    for(int loop = 0; loop < ll.getChildCount(); loop++) {
        //this is the code in question and where I want to get the text from
        //all my EditTexts
        LinearLayout inner = ll.getChildAt(loop);


    }
}
}

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, что нашел ответ на это.Вам нужно немного изменить код в методе startGame (). Я предоставляю код для startGame ниже.

   public void startGame(View view) {
        LinearLayout ll = findViewById(R.id.playerView);
        List text = new ArrayList();

        for (int loop = 0; loop < ll.getChildCount(); loop++) {
            //this is the code in question and where I want to get the text from
            //all my EditTexts
            LinearLayout inner = (LinearLayout) ll.getChildAt(loop);
            for (int j = 0; j < inner.getChildCount(); j++) {
                if (inner.getChildAt(j) instanceof EditText) {
                    EditText textET = (EditText) inner.getChildAt(j);

                    Log.d("TAG",textET.getText().toString());
                }
            }

        }
    }

В приведенном выше коде вы смогли получить только первого ребенка, но, как и вы,добавлен linearLayout с ориентацией Horizontal в родительском LinearLayout с ориентацией Vertical, вы написали код для дочернего элемента родительского макета, т.е. playerView.Я изменил код, чтобы получить элементы дочернего линейного макета, и Log печатает весь текст из EditText.

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...