2010-09-16 19 views
13

Mam działanie, które zawiera ListView zdefiniowany w XML (nie podklasy klasy ListActivity).Wywołanie metody setEndty zestawu nie działa (nic nie jest wyświetlane, gdy lista jest pusta)

chcę wyświetlić komunikat kiedy ListView jest pusty, więc próbowałem robić to metodą setEmptyView:

listView = (ListView) findViewById(R.id.list); 
TextView emptyListText = new TextView(this); 
// also tried with the following line uncommented 
// emptyListText.setId(android.R.id.empty); 
emptyListText.setText(getString(R.string.EmptyList)); 
listView.setEmptyView(emptyListText); 

Ale to nie działa.

Wszelkie pomysły?

Dzięki.

Odpowiedz

0

Hmm, może to dlatego, że widok nie ma ustawionych zestawów parametrów. Spróbuj ustawić niektóre parametry układu na ten widok i myślę, że to zadziała. Coś takiego:

emptyListText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

Jeśli to nie zadziała, spróbuj nadmuchać widoku rodzica Twojego ListView za (R.id.list), z czegoś takiego:

mEmptyListView = (LinearLayout) getLayoutInflater().inflate(
       R.layout.no_items, 
       (LinearLayout) findViewById(R.id.list)); 
mListView.setEmptyView(findViewById(R.id.no_items)); 

jestem zapisz go z pamięci, więc daj mi znać, jeśli to nie działa lub jest jakaś literówka. Zasadniczo chodzi o to, że Twój widok powinien być dodany do układu

Ger

+0

Dzięki za propozycję, ale to nadal nie działa. – MyNameIsZero

+0

OK, zredagowałem moją odpowiedź. Daj mi znać, jeśli to działa dla Ciebie ... – ggomeze

23

Trzeba dodać następujące dwa wiersze do kodu po wywołaniu setText():

emptyListText.setVisibility(View.GONE); 
((ViewGroup)listView.getParent()).addView(emptyListText); 

Jeżeli widoczność nie jest ustawiona na GONE (hidden), wtedy TextView zawsze będzie widoczny. Drugi wiersz umieszcza TextView w ViewGroup ListView - który jest automatycznie obsługiwany podczas używania deklaratywnych widoków XML.


Źródło: http://www.littlefluffytoys.com/?p=74

+0

@MyNameIsZero: Czy nasze odpowiedzi pomogły, czy nadal masz problemy? – McStretch

+5

Dzięki, pomogło umieszczenie widoku w tej samej grupie ViewGroup. GONE jest ustawiany automatycznie przy pomocy setEmptyView, więc nie musisz wywoływać funkcji setVisibility. –

+0

Dzięki, stary, ten kamień –

2

Spróbuj to w ten sposób ...

układ Pierwszy prosty activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/root_list" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" /> 

    <ViewStub 
     android:id="@+id/root_empty" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout="@layout/empty_view" 
     android:visibility="gone" /> 

</LinearLayout> 

iz MainActivity.java:

public class MainActivity extends Activity { 
    ListView mListView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     this.mListView = (ListView) findViewById(R.id.root_list); 
     mListView.setEmptyView(findViewById(R.id.root_empty)); 

     mListView.setAdapter(null); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    }  
} 

Cokolwiek zostanie umieszczone w R.layout.empty_view pojawi się, gdy adapter ma wartość NULL lub isEmpty zwraca true.

użyłem tego dla empty_view.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:background="@color/gray" 
     android:gravity="center" 
     android:text="@string/list_empty" 
     android:textColor="@color/white" 
     android:textSize="24sp" /> 

</LinearLayout> 
Powiązane problemy