2012-03-06 2 views
9

C'è una ListView nella mia app e ListView ha un selettore. Voglio rendere il primo elemento di questo ListView da selezionare come predefinito all'avvio proprio dell'App, Come? Qualcuno può dare qualche consiglio? Grazie mille.Come rendere il primo elemento di un ListView da selezionare come predefinito all'avvio?

+0

Giù vota per non fornire alcuni snippet per aiutarti, senza guardare nel tuo codice SO non riesci a indovinare dove sei bloccato. –

+0

Vedere anche per un esempio completo: http://stackoverflow.com/questions/30409421/listview-list-item-selection-and-initial-setting-custom-made-items – tjm1706

risposta

6

È possibile farlo

yourListView.setSelection(0); 
yourListView.getSelectedView().setSelected(true); 

Spero che questo vi aiuterà a

+7

Non funziona ... – acoustic

+0

può mostri il tuo codice in modo che possiamo essere più vicini .... –

+0

@ChiragPatel ti prego di aiutarmi in questo numero http://stackoverflow.com/questions/18099756/default-selection-of-a-row-in- the-listview-and-highlist-the-slected-row-android – Developer

1

Creare un onItemClickListener quindi utilizzare questo frammento, compilando i valori appropriati:

listView.performItemClick(View view, int position, long id); 

See the docs per ulteriori dettaglio.

+0

ho provato, non funziona ... – acoustic

+0

Forse dovresti fornire del codice nella tua domanda per mostrarci come lo stai provando. – koopaking3

2
//put the below code in get view function 
if(position==0) 
{ 
    convertView.setSelected(true); 
} 
1

È possibile chiamare listview.setSelection(0);. Assicurati solo di chiamarlo dopo aver popolato il tuo List. Se lo chiami prima di compilare il tuo List non funzionerà, perché non avrà alcun dato in quel momento.

+0

Penso che la tua risposta sia adatta e utile, ma non funziona quando la inserisco nel mio codice in cui penso che la lista sia stata popolata. Forse c'è qualcosa di sbagliato nell'altro posto del codice ...... – acoustic

+0

sii meglio se puoi pubblicare il codice su come lo stai scrivendo. –

+0

@LalitPoptani puoi aiutarmi in questo http://stackoverflow.com/questions/18099756/default-selection-of-a-row-in-the-listview-and-highlight-the-slected-row-android/18099844 ? noredirect = 1 # comment26498081_18099844 – Developer

2

penso che questo funzionerà come abbiamo dato 0 indice della matrice per listView

ListView.setSelection(0); 
+0

Questo non funziona –

10
yourlist.setItemChecked(position,true) 
0

Questo funziona se si vuole clic su di esso per ottenere evento aggiuntivo manipolazione fatto:

listView.getAdapter().getView(position, null, null).performClick(); 
0

Puoi sistemarlo in questo modo.

//set list adapter, then 
lv.setItemChecked(1, true);//position 1 
lv.setSelection(1);//position 1 

Aggiornamento layout XML con scelta singola.

<ListView 
    android:id="@+id/lv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/list_item_background" 
    android:cacheColorHint="#FFFFFF" 
    android:choiceMode="singleChoice" 
    android:dividerHeight="1dip" > 
</ListView> 

e impostare sfondo XML ListView come list_item_background.xml,

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/bg_list_default" android:state_activated="false"/> 
    <item android:drawable="@drawable/bg_list_pressed" android:state_pressed="true"/> 
    <item android:drawable="@drawable/bg_list_pressed" android:state_activated="true"/> 

4

questo lavoro per me. Spero che questo ti possa aiutare. :)

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    // do someting... 
    if(position == 0){ 
     mListView.performItemClick(convertView, 0, 0); 
    } 

} 

ora ho trovato un altro buon modo per implementare questo.

  • In primo luogo, è necessario impostare ListView Android: choiceMode = singleChoice
  • In secondo luogo, basta andare avanti come seguire,

    int defaultPositon = 0; 
        int justIgnoreId = 0; 
        mListView.setItemChecked(defaultPositon, true); 
        mListView.performItemClick(mListView.getSelectedView(), defaultPositon, justIgnoreId); 
    
+0

Questo funziona. Un problema risolto, ora il prossimo: l'elemento selezionato non viene evidenziato. WTF Android! –

0

Sotto soluzione funziona per me:

Impostazione sfondo/Visualizza ID per ottenere Visualizza & utilizzando setOnItemClickL istener della lista Visualizza

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater) 
       ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.listitems, null); 
    } 
    ListItem m = items.get(position); 

    if (m != null) { 

     TextView txt = (TextView)v.findViewById(R.id.textView); 
     txt.setText(m.Item); 

    } 

    // set selected item 
    LinearLayout ActiveItem = (LinearLayout) v; 
    v.setId(position); 
    if (position == GetDeviceDetails.selectedsize) 
    { 
     ActiveItem.setBackgroundColor(0xFF7F8184); 
    } 
    return v; 
} 

Nella attività su Crea:

listView1.setOnItemClickListener(
      new AdapterView.OnItemClickListener() { 
       public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { 
        adapter.findViewById(GetDeviceDetails.selectedsize).setBackgroundColor(0xFFFFFFF); 
        GetDeviceDetails.selectedsize = position; 
        adapter.findViewById(position).setBackgroundColor(0xFF7F8184); 
        Log.d("Selected Id", "" + v.getId()); 
        Log.d("find Selected Id", "" + adapter.findViewById(0)); 
       } 
      }); 
    listView1.setSelection(0); 
    listView1.setItemChecked(0, true); 
0

questo funziona per ME.You devono fare adattatore personalizzato.

 First Create Modal Class 

     public class FilterBean { 

     String filter_catagory; 
       boolean isSelected; 

      public boolean isSelected() { 
       return isSelected; 
      } 

      public void setSelected(boolean selected) { 
       isSelected = selected; 
      } 

      public String getFilter_catagory() { 
       return filter_catagory; 
      } 

      public void setFilter_catagory(String filter_catagory) { 
       this.filter_catagory = filter_catagory; 
      } 

     } 


    In Adapter Class 

    @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      convertView = layoutInflater.inflate(R.layout.size_name_indicator, null); 
      txt = (TextView) convertView.findViewById(R.id.key_textView); 
      txt.setText(getItem(position).getFilter_catagory()); 

      if(getItem(position).isSelected()){ 
       txt.setBackgroundColor(context.getResources().getColor(R.color.transparent)); 
      }else { 

       txt.setBackgroundColor(context.getResources().getColor(R.color.colorWhite)); 
      } 


      return convertView; 
     } 

    public void updateNameBean(String key,boolean checked) 
     { 

      for(int i=0;i<getCount();i++) 
      { 
       FilterBean filterBean = getItem(i); 
       if(filterBean.getFilter_catagory().equals(key)) 
       { 
        filterBean.setSelected(checked); 
       }else { 
        filterBean.setSelected(false); 
       } 
      } 
      notifyDataSetChanged(); 
     } 

In Filter Activity or Fragment 

filter_listView.setAdapter(filterNameAdapter); 
       filterNameAdapter.updateNameBean(filterNameAdapter.getItem(0).getFilter_catagory(),true); 
     filter_listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       String key = filterNameAdapter.getItem(position).getFilter_catagory(); 
       filterNameAdapter.updateNameBean(filterNameAdapter.getItem(position).getFilter_catagory(),true); 

      } 
     }); 
0
if(position == 0){ 
     // This is the first item, you need to select this 
     //rowview which u inflate under getview 
     rowView.performClick(); 

    } 

Credo che questo vi aiuterà. funziona per me