2010-10-17 3 views
0

У меня есть список, который является основной частью моей деятельности. Когда в списке нет объектов, я хочу заменить его полезным сообщением (TextView). Я просто вызываю setContentView снова, если список не используется в onResume.Switching View Midactivity

Однако это работает только для TextView. Если я позвоню setContentView(R.layout.mylayout), я получу пробел. Это особенно утомительно после того, как пользователь создал элемент, который должным образом перейдет в список в другой активности и вернется.

Есть ли у меня правильный подход? Как это исправить?

Спасибо!

ответ

3

В ListView есть метод, называемый setEmptyView (View), через который вы можете отобразить любое представление, когда список пуст. ListView заботится о скрытии/отображении вида.

TextView emptyView = (TextView)findViewById(R.id.empty_list_view); 
placesList.setEmptyView(emptyView); 

Код макета такой же, как и код Blrfl.

1

Ну, что у вас в списке? Если у вас есть только текст, вы можете ввести свое сообщение в качестве первой части списка, если только что-то не добавлено. Например, если у вас есть массив строк, которые печатаются со списком, попробуйте, чтобы первый из массива был вашим сообщением, если кто-то не добавил что-то еще.

+0

Я полагаю, что это возможное решение, но что бы я сделал в более сложной ситуации, где я хотел закрепить что-то более существенное на месте? – SapphireSun

1

Вместо использования setContentView, возможно, вы можете попробовать изменить флаги видимости каждого вида с помощью setVisibility. Если список не заполнен, вы можете изменить его видимость на View.GONE и сделать вспомогательный TextView видимым с View.VISIBLE и сделать наоборот, если ListView заполнен. Не уверен, что это именно то, что вы ищете, но это стоит того.

1

Я бы добавил это в ответ BenV как комментарий, но я не могу вставить код. Вот как я сделать макет:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <ListView android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1.0" 
    /> 
    <TextView android:id="@android:id/empty" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center" 
     android:text="@string/list_empty" 
    /> 
</LinearLayout> 

Просто перед вызовом notifyDataSetChanged() на ArrayAdapter, я делаю setVisibility(View.VISIBLE) и setVisibility(View.GONE) на list и empty соответственно, если есть элементы в списке и наоборот, если список пуст.