2013-09-29 19 views
7

Mam działanie z listą, której elementy składają się z obrazu + tekstu. Muszę zezwolić użytkownikowi na zmianę widoku i zamiast tego mieć widok siatki (którego elementy są nadal wykonane z tego samego obrazu + tekstu).Przechodzenie z widoku listy do widoku siatki

Użytkownik może to zrobić poprzez menu ikony:

public boolean onOptionsItemSelected(MenuItem item) 
{ 
    if(item.getItemId()== R.id.change_view) 
    { 
     // ? 
    } 
} 

starałem się po prostu ustawić nową kartę (patrz poniżej), ale to nie work..do muszę utworzyć nową aktywność na Zrób to?

if(item.getItemId()== R.id.change_view) 
{ 
    setContentView(R.layout.grid_view); 
    gridViewAdapter = new GridViewAdapter(this,R.layout.bookmark_list_item,MyApp.getItems().findAll()); 
    list.setAdapter(gridViewAdapter); 
    list.setVisibility(View.VISIBLE); 
} 

Odpowiedz

0

I ostatecznie rozwiązany z czymś takim:

dla układu mojej aktywności mam:

<?xml version="1.0" encoding="utf-8"?> 

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 


<ViewStub android:id="@+id/list" 
    android:inflatedId="@+id/showlayout" 
    android:layout="@layout/list_view" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dp"/> 

<ViewStub android:id="@+id/grid" 
    android:inflatedId="@+id/showlayout" 
    android:layout="@layout/grid_view" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10dp"/> 


</merge> 

Potem już zdefiniowany układ na liście i sieci (a także ich elementów), i udało przejście między nimi pompowania i układy następnie za pomocą tej metody:

private void changeView() { 

    //if the current view is the listview, passes to gridview 
    if(list_visibile) { 
     listview.setVisibility(View.GONE); 
     gridview.setVisibility(View.VISIBLE); 
     list_visibile = false; 
     setAdapters(); 
    } 

    else { 
     gridview.setVisibility(View.GONE);      
     listview.setVisibility(View.VISIBLE); 
     list_visibile = true; 
     setAdapters(); 
    } 
} 

kompletny kod jest dostępny w tym artykule: http://pillsfromtheweb.blogspot.it/2014/12/android-passare-da-listview-gridview.html

11

Istnieje kilka sposobów na osiągnięcie tego celu.

  1. Jednym rozwiązaniem jest posiadanie zarówno ListView i GridView ułożone w FrameLayout i kiedy chcesz, aby przełączyć się między tymi widokami, ustaw widoczność GONE do jednego widoku i VISIBLE do drugiego, potem na odwrót.

  2. Put zarówno ListView i GridView w ViewFlipper

  3. Lub użyć ViewSwitcher

  4. I wreszcie korzystać tylko GridView, ale jeśli chcesz, aby przejść do widoku listy, należy ustawić programowo liczba kolumn na 1.

+0

zwięzły i precyzyjny .. dziękuję;) – SegFault

+0

@Andy Res można dać jakiś link/samouczek do zmiany Dyna mically z listview do gridview lub viceversa? – Hendy

+2

Punkt # 4. Cóż za idealnie eleganckie rozwiązanie! – eidylon

Powiązane problemy