在所有现有 children 之上使用新的 child 膨胀视图

Inflate view with new child above all existing children

刚刚接触 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 将新的猜测置于其他猜测之上,或者我认为这一切都是错误的?

您可以使用 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

index int: the position at which to add the child

我不确定这是否是处理此类行为的最佳方式。

我建议将 LinearLayout 替换为 ListViewRecyclerView(哪个最适合您)并向适配器添加新项目。 这样您就可以控制要将新项目添加到哪个位置。 此外,将所有数据放在一个列表中可以让您更好地控制它(从我的角度来看)。