Идея изложена в очень хороших решениях:
Похоже, что они оба прекрасно работают, по крайней мере, в версии 4.4.3.
Мне все еще пришлось потратить некоторое время на написание тестового кода, чтобы проверить его и подтвердить каждый метод.Ниже приведен самодостаточный минимальный тестовый код.
Макет основан на решении Sparkle, так как содержит меньше вложенных макетов.Также был обновлен, чтобы отразить текущие проверки LINT.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="MainActivity" >
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Grow List"
tools:ignore="HardcodedText" />
</LinearLayout>
Activity предоставляет шаблонный код для проверки решения самостоятельно.
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listview = (ListView)findViewById(R.id.listview);
final ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
new ArrayList<String>());
adapter.setNotifyOnChange(true);
listview.setAdapter(adapter);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
int count = adapter.getCount();
adapter.add(String.valueOf(count));
listview.setSelection(count);
}
});
}
}
Не стесняйтесь добавлять или улучшать, так как это "сообщество вики".