Aggiungi vista tra 2 righe Gridview

Ho un GridView, con 3 elementi per row, e quando faccio clic su un elemento, una nuova visualizzazione viene al di sotto della row. È un po 'come un'applicazione di cartelle su iOS. Non ho trovato alcuna risposta su SO o su Google. Forse puoi darmi qualche suggerimento.

immettere qui la descrizione dell'immagine

  • Colore di incandescenza / bordo di overscroll su ordinazione per ListView?
  • Activity Listener - Google Cloud Messaging - BroadcastReceiver
  • La sola cosa del text è visibile dopo la pausa di GLSurfaceView su Galaxy S3 - La sfocatura del text quando viene spostata. Nessun background dei pulsanti
  • eseguire la function da .js con J2V8
  • Android: Quando le classi vengono scaricate dal sistema?
  • Qual è il modo corretto per configurare un progetto Android con i sottomoduli da utilizzare con il plugin di gradi sonarqube?
  • App per monitorare altre applicazioni su android
  • Errore di gonfiaggio della vista di class interna
  • Android Come funziona un'applicazione come applicazione di sistema?
  • Notifica di annullamento di Android
  • Android NDK, mantenendo gli oggetti C ++ in diretta
  • Android Parcelable e Serializable
  • 3 Solutions collect form web for “Aggiungi vista tra 2 righe Gridview”

    È ansible farlo facilmente con GridLayout ma non con GridView .

    Per individuare la width disponibile della griglia prima di inserire i tuoi elementi e impostare il numero di colonne, impostare un ViewTreeObserver.OnGlobalLayoutListener (che può quindi inserire gli elementi) o estendere GridLayout e sovrascrivere onMeasure (int widthMeasureSpec, int heightMeasureSpec) .

    Inserisci una row dopo each row di contenuto e imposta la sua visibilità su Visibility.GONE e la sua columnSpec al numero di colonne del tuo GridLayout . Quando l'utente tocca un elemento, è ansible get le informazioni, popolare la visualizzazione sotto di essa e espandere o animare la sua visibilità.

    Infine, per l'indicatore, vorrei solo aggiungere come figlio della row nascosta e, quando un utente tocca l'elemento, calcolare il centro orizzontale di tale voce e mettere esattamente il centro di questa vista sull'asse X a quella coordinata (i margini avrebbero essere OK per questo).

    Si prega di notare che per gli elenchi di articoli molto grandi non è raccomandato perché dovrai istanziare each elemento da visualizzare immediatamente, indipendentemente dal fatto che tutti si adattano allo schermo o less. A differenza di GridView , GridLayout non è un figlio di AbsListView .

    Anche se ovviamente non esiste una componente nativa per eseguire ciò che vuoi fare qui, ci sono diversi modi per get l'effetto desiderato combinando altri methods.

    Un modo in cui riesco a pensare è creare la tua propria scheda e aggiungere la funzionalità per inserire altri 3 elementi sotto la row cliccato taggati con una sorta di enum in modo da poterli distinguerla dalla visualizzazione regolare, naturalmente al metodo getView dell'adattatore , dovrai fare la validation per sapere quale vista gonfiare e tornare, dopo aver aggiornato la visualizzazione, quei tre elementi verranno inseriti sotto l'elemento cliccato e naturalmente puoi eliminarli modificando l'elenco che l'adattatore sta visualizzando. (Questo approccio richiede una buona conoscenza degli adattatori personalizzati, ho fatto qualcosa di simile e sono un approccio pulito e buon).

    Un altro approccio a questo problema che non è altrettanto buono come il primo, comunque, avrebbe assolutamente fatto il trucco, creando un tipo di "Template" dell'Effetto che si desidera get (come quello nella foto che hai), tenere quel model come parte dell'attività in cima alla tua vista di griglia invisibile, una volta che qualcuno tocca su un elemento, compila il model in base alle informazioni che vuoi mostrare, rendi la griglia invisibile e port il "model" visibile in cima alla griglia , con le informazioni che si desidera mostrare correttamente riempito, l'utente non avrebbe notato la modifica e quando si desidera tornare alla vista griglia, è sufficiente rimuovere la vista "model" e farà l'effetto di avere la griglia come era originariamente.

    Spero che questo ti aiuti.

    Saluti!

    Utilizzo TableLayout.addView per aggiungere un ImageView, potrebbe essere necessario un'altra variabile per rimuovereView, attualmente lo rimuovo e aggiungo un altro quando il button è stato cliccato.

    Cambio l'image con la posizione che puoi basare su quella per cambiare lo background in modo che l'utente lo assumerà relativo a quello che fanno click

     ImageView imag; boolean imageOn = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imag = new ImageView(this); final TableLayout table = (TableLayout) findViewById( R.id.tableLayoutCategoryButtons ); int buttonsInRow = 3; String[] itemNames = getResources().getStringArray(R.arrays.categories_arrays); int numRows=(itemNames.length/buttonsInRow); if (itemNames.length%buttonsInRow!=0) numRows++; Button[] buttons = new Button[itemNames.length]; LinearLayout[] tablerowLayout = new LinearLayout[numRows]; tablerowLayout[0] = new LinearLayout(table.getContext()); int rowcount=0; for (int i=0; i<itemNames.length; i++){ buttons[i]= new Button(table.getContext(), null, android.R.attr.buttonStyleSmall); buttons[i].setText(itemNames[i]); buttons[i].setId(i); buttons[i].setTextColor(Color.BLACK); buttons[i].setVisibility(View.VISIBLE); buttons[i].setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { if(imageOn){ table.removeView(imag); imageOn = false; } int index = v.getId()/buttonsInRow+1; if(v.getId()%buttonsInRow==1) imag.setImageResource(R.drawable.reta); else if(v.getId()%buttonsInRow==2) imag.setImageResource(R.drawable.reta2); else imag.setImageResource(R.drawable.reta3); imageOn = true; table.addView(imag, index); }}); LinearLayout.LayoutParams buttonLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); tablerowLayout[rowcount].addView(buttons[i], buttonLayoutParams); if (((i+1)%buttonsInRow==0)&&(i!=0)){ table.addView(tablerowLayout[rowcount++]); if(rowcount<numRows) tablerowLayout[rowcount] = new LinearLayout(table.getContext()); } } if(rowcount<numRows) table.addView(tablerowLayout[rowcount]); 

    simulazione basata sul codice

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.