2013-09-29 16 views
7

Ho un'attività con un elenco, i cui elementi sono costituiti da un'immagine + testo. Devo permettere all'utente di cambiare la vista e avere una griglia invece di quella (i cui elementi sono ancora fatti della stessa immagine + testo).Passaggio da una vista elenco a una vista griglia

L'utente può farlo attraverso un menù ad icone:

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

ho cercato di impostare solo la nuova scheda (vedi sotto), ma non work..do devo creare una nuova attività di Fai quello?

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); 
} 

risposta

0

ho finalmente risolto con qualcosa di simile:

per il layout della mia attività ho:

<?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> 

poi ho definito il layout per la lista e la griglia (e anche per i loro articoli), e gestito il passaggio tra loro gonfiare i layout e poi con questo metodo:

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(); 
    } 
} 

il codice completo è disponibile in questo articolo: http://pillsfromtheweb.blogspot.it/2014/12/android-passare-da-listview-gridview.html

11

Ci sono molti modi per ottenerlo.

  1. Una soluzione è quella di avere sia il ListView e GridView accatastati in un FrameLayout, e quando si desidera passare da una visualizzazione all'altra, impostare la visibilità GONE per una visualizzazione e VISIBLE ad un altro, poi viceversa.

  2. Mettete sia il ListView e GridView in un ViewFlipper

  3. Oppure, utilizzare un ViewSwitcher

  4. E, infine, utilizzare solo un GridView, ma quando si vuole passare a una visualizzazione elenco, impostare a livello di codice il numero di colonne da 1.

+0

conciso e preciso .. grazie;) – SegFault

+0

@Andy Res si può dare qualche link/tutorial per cambiare Dyna micalmente da listview a gridview o viceversa? – Hendy

+2

Punto 4. Che soluzione perfettamente elegante! – eidylon