2013-04-24 11 views
6

Sto lavorando su un'applicazione con barra di azione per la navigazione. Ora sto cercando di aggiungere uno Spinner allo ActionBar.Spinner in action bar con solo l'icona ma non l'opzione selezionata

Sono in grado di ottenere la mia icona personalizzata su ActionBar. Ma quando aggiungo le voci alla casella di selezione, l'icona è nascosta dietro la casella di selezione con il primo elemento selezionato.

Desidero visualizzare solo l'icona nello ActionBar e nello drop-down-list/spinner quando viene toccata sull'icona.

Questo è il mio codice:

private void initializeMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options, menu); 

    View v = (View) menu.findItem(R.id.menuSort).getActionView(); 
    Spinner spinner=(Spinner)v.findViewById(R.id.bookmarks_menu); 

    Bookmark bookmark1 = new Bookmark(); 
    Bookmark bookmark2 = new Bookmark(); 

    List<Bookmark> list = new ArrayList<Bookmark>(); 
    list.add(bookmark1); 
    list.add(bookmark2); 

    SpinAdapter adapter = new SpinAdapter(getApplicationContext(),0, list); 
    spinner.setAdapter(adapter); 
} 
+0

Leggi questo: http://developer.android.com/guide/topics/ui/actionbar.html –

risposta

0

controllo questo suo funzionamento ..

enter image description here

public class MainActivity extends Activity { 

    final String[] choices = { "Android", "iOS", "RIM" }; 
    final int[] choices_img = { R.drawable.ic_launcher, R.drawable.ios, 
      R.drawable.black }; 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       MainActivity.this, android.R.layout.simple_dropdown_item_1line, 
       choices); 
     ListViewAdapter adapter1 = new ListViewAdapter(MainActivity.this); 
     actionBar.setListNavigationCallbacks(adapter1, 
       new OnNavigationListener() { 
        @Override 
        public boolean onNavigationItemSelected(int itemPosition, 
          long itemId) { 
         Toast.makeText(MainActivity.this, 
           choices[itemPosition], Toast.LENGTH_SHORT) 
           .show(); 
         return false; 
        } 
       }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public class ListViewAdapter extends BaseAdapter { 

     private LayoutInflater mInflater; 

     public ListViewAdapter(Context con) { 
      // TODO Auto-generated constructor stub 
      mInflater = LayoutInflater.from(con); 
     } 

     public int getCount() { 
      // TODO Auto-generated method stub 
      return choices.length; 
     } 

     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      // return product_id1.size(); 
      return position; 
     } 

     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      // return product_id1.get(position).hashCode(); 
      return position; 
     } 

     @SuppressLint("NewApi") 
     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      // TODO Auto-generated method stub 
      final ListContent holder; 
      View v = convertView; 
      if (v == null) { 
       v = mInflater.inflate(R.layout.scan_row1, null); 
       holder = new ListContent(); 

       holder.name = (TextView) v.findViewById(R.id.textView1); 

       holder.img_p = (ImageView) v.findViewById(R.id.imageView1); 

       // holder.total_rate.setOnClickListener(mOnTitleClickListener1); 

       v.setTag(holder); 
      } else { 

       holder = (ListContent) v.getTag(); 
      } 

      holder.img_p.setBackground(getResources().getDrawable(
        choices_img[position])); 
      holder.name.setText("" + choices[position]); 

      return v; 
     } 
    } 

    static class ListContent { 

     ImageView img_p; 
     TextView name; 

    } 

} 

se si desidera Solo icona poi basta usare visualizzazione dell'immagine in scan_row1.xml

+0

Grazie @Dhawal. Sono riuscito a ottenere questo schermo. Quello che sto cercando di ottenere è di avere solo un'icona sulla barra delle azioni ma non l'elemento selezionato (rim_icon e il testo "RIM) .Voglio che le 3 opzioni di elenco vengano visualizzate toccando l'icona della barra delle azioni. –

+0

@VijayAnant trovare un modo per risolverlo? –

6

solo-icona Spinner è raggiungibile attraverso alcuni gradini.

Fase 1

Mettere l'icona desiderata nella xml:

<Spinner 
    ... 
    android:background="@drawable/ic_sort_white_24dp" /> 

Fase 2

Poi, nel adapter del Spinner, ignorare getView(), come questo :

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list){ 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // this part is needed for hiding the original view 
      View view = super.getView(position, convertView, parent); 
      view.setVisibility(View.GONE); 

      return view; 
     } 
}; 

Spiegazione

Abbiamo bisogno di capire che getView() l'adattatore è la vista che verrà utilizzata quando il Spinner non viene aperta. Facciamo la visibilità gone perché non vogliamo vederla, così quello che rimane è lo sfondo di Spinner dall'xml, che ho già impostato su ic_sort_white_24dp in questo esempio (Passaggio 1).

Non mescolare con getDropDownView() utilizzato per le righe di opzioni che verranno eliminate dopo aver fatto clic su Spinner.

Screenshot bonus!

Ecco come il mio aspetto. Spero che sia d'aiuto!

screenshot

+1

Vale la pena leggere solo per lo screenshot! –

Problemi correlati