2016-06-17 5 views
1

Просто получив доступ к LayoutInflater и его возможностям и придумал глупый вопрос. Я работаю над макетом игры, в котором игрок делает неизвестное количество догадок, и я хотел бы надуть каждое новое предположение на guessContainer выше всех предыдущих существующих.Надуйте вид новым ребенком выше всех существующих детей

Соответствующие XML:

<LinearLayout 
    android:id="@+id/guessContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:orientation="vertical"></LinearLayout> 

Соответствующие Java:

private void addNewGuess(){ 
    ViewGroup guessContainer = (ViewGroup)findViewById(R.id.guessContainer); 
    View newGuess = getLayoutInflater().inflate(R.layout.guess_new, null); 
    guessContainer.addView(newGuess); 
} 

Приведенный выше код работает, как ожидалось - каждый раз, когда addNewGuess называется новая копия R.layout.guess_new генерируется ниже всех остальных. Есть ли способ перевернуть это поведение и использовать LayoutInflater, чтобы разместить новые догадки поверх других или я думаю об этом все неправильно?

ответ

1

Вы можете использовать addView(View child, int index):

private void addNewGuess(){ 
    ViewGroup guessContainer = (ViewGroup)findViewById(R.id.guessContainer); 
    View newGuess = getLayoutInflater().inflate(R.layout.guess_new, null); 
    guessContainer.addView(newGuess, 0); 
} 

От documentation:

индекс междунар: положение, при котором добавить ребенка

1

Я не уверен, если это это лучший способ справиться с таким поведением.

Что я предлагаю заменить, что LinearLayout с ListView или RecyclerView (который подходит вам лучше всего) и добавление новых элементов в адаптер. Таким образом, вы можете контролировать, в какой позиции вы хотите добавить новый элемент. Кроме того, наличие всех ваших данных в списке дает вам больше контроля над ним (с моей точки зрения).

+0

Я думаю, что это лучший ответ, хотя ответ @ user13 на самом деле объясняет, что задал этот вопрос. Я не знаю, почему это получило недовольство. – nexus5x

+0

Я собираюсь принять ответ пользователя13, но вы правы - я думаю, что ListView - это то, что я хочу. Спасибо, что указали мне в правильном направлении! Мне еще предстоит пройти долгий путь, но вещи медленно собираются вместе. –

+0

Ну, пользователь13 ответил на ваш вопрос, я просто дал другое решение. Моя главная забота всегда заключалась в том, чтобы убедиться в том, что как можно больше контроля над пользовательским интерфейсом и данными, представленными в нем. – Marijan