ElencoSelettore Colore dopo aver premuto un elemento

Ho letto molto su ListSelector e selettori. Ma non riesco a capire come avere l'elemento di un ListView avere un colore diverso dopo che è stato premuto.

In un layout di frammento doppio, l'utente fa clic su LeftView, i dati vengono caricati e presentati nel frammento di destra. Per mantenere l'utente informato quale elemento selezionato voglio che questo venga evidenziato finché l'elemento successivo nella Lista sinistra non viene premuto.

  • Implementa l'interface DialogFragment in OnClickListener
  • Il database SQLite ..onCreate () non viene chiamato
  • Come centrare il contenuto all'interno di un layout lineare?
  • Inserimento di text di Android Specifica dell'interface utente
  • Carica la libreria condivisa nativa da un'altra applicazione Android
  • Studio di Android aggiunge l'authorization indesiderata dopo l'esecuzione dell'applicazione sul dispositivo reale
  • Ho bisogno di uno stato personalizzato? Come fa l'app GMail?

    grazie

  • scorri in phonegap android
  • Come utilizzare DecimalFormat per formattare i soldi?
  • Proguard impostazione per non rimuovere il metodo non utilizzato
  • Android: Come scrivere nel database SQL
  • Come utilizzare il carattere personalizzato in Android Studio
  • Hardware accelerato FFmpeg su android?
  • 5 Solutions collect form web for “ElencoSelettore Colore dopo aver premuto un elemento”

    Giusto, hai bisogno di uno stato aggiuntivo. Non sono sicuro di come l'app GMail lo sta facendo, ma le impostazioni predefinite android utilizzano android:state_activated="true" nel loro selettore per l'elenco delle tabs. Non dimenticare di impostare l'elenco android:choiceMode="singleChoice" .

    Hai provato questo selettore?

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_selected="true" android:drawable="@android:color/transparent" /> <item android:state_selected="true" android:drawable="@android:color/transparent" /> <item android:state_pressed="true" android:state_selected="false" android:drawable="@android:color/transparent" /> <item android:state_selected="false" android:drawable="@color/message_item_read" /> 

    Il selettore deve essere applicato allo background dell'elemento, non all'elenco Selector.

    La mia soluzione per Android> 1.6 è:

    in Attività:

     public static int POS = -1; ... listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ... POS = arg2; ... } 

    in adattatore:

     public View getView(int position, View convertView, ViewGroup parent) { ... int pos = MyActivity.POS; if (pos == position){ convertView.setBackgroundResource(R.drawable.lv_yellow); }else{ convertView.setBackgroundResource(R.drawable.lv_empty); } ... } 

    Ho sofferto con questo problema stesso … dopo aver lavorato per lungo tempo ho trovato la soluzione e sta funzionando per me. Prima di tutto crea list_view_selector.xml sotto la tua cartella disegnabile:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Selector style for listrow --> <item android:state_selected="false" android:drawable="@drawable/gradient_bg_listview" /> <item android:state_selected="true" android:drawable="@drawable/gradient_bg_hover_listview" /> <item android:state_activated="true" android:drawable="@drawable/gradient_bg_hover_listview" /> </selector> 

    Quindi il layout che utilizzi per recuperare i dati delle liste è necessario definire list_view_selector. Nel mio caso ho definito così:

     //This is the adapter where I defined my customlistview SimpleAdapter adapter1 = new SimpleAdapter( this, list1, R.layout.customlistview, new String[] {"practice_technique","blank"}, new int[] {R.id.text1,R.id.text2} ); //This is my customlistview where I defined list_view_selector <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="@drawable/list_view_selector" > <TextView android:id="@+id/text1" style="@style/ListViewItemTextStyle" android:layout_width="fill_parent" android:paddingTop="5dp" android:paddingLeft="10dp" android:layout_height="fill_parent" /> <TextView android:id="@+id/text2" android:textSize="12sp" android:textStyle="bold" android:textColor="#616162" android:paddingLeft="10dp" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout> 

    Poi finalmente onListItemclick devi scrivere qualcosa di simile:

      protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); HashMap<String, String> val = list.get(position); selectedTech = val.get("practice_technique"); //below is the key line v.setSelected(true); startSelectedPage(); } 

    Scrivere il proprio ListAdapter per farlo. In particolare, estendere ArrayAdapter e mettere un codice in questo metodo:

      View getView(int position, View convertView, ViewGroup parent) 

    In sostanza, questo codice rileva se il valore è stato scelto e modificare il colore di background della vista. Adesso, come si può dire che una vista è stata cliccata prima? Suggerisco di rendere l' ArrayAdapter esteso OnClickListener e impostare il setOnItemClickListener di ListView setOnItemClickListener ArrayAdapter personalizzato. Puoi capire quale elemento è stato cliccato da qualcosa del genere:

      public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { //Note that position is the item which was clicked. } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.