2013-04-24 47 views
6

我正在开发一个带导航操作栏的应用程序。现在我正在尝试将Spinner添加到ActionBar微调控制器只有图标,但没有被选中的选项

我可以在ActionBar上获得我的自定义图标。但是,当我将条目添加到微调框中时,该图标将隐藏在选择框后面并且第一个项目被选中。

我想只有ActionBardrop-down-list/spinner中的图标在点击图标时出现。

这是我的代码:

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

阅读:http://developer.android.com/guide/topics/ui/actionbar.html – 2013-04-24 05:46:09

回答

0

检查此其工作..

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; 

    } 

} 

如果只想图标,然后只需使用图像视图中scan_row1.xml

+0

感谢@Dhawal。我设法弄到了这个屏幕。我试图实现的是在操作栏上只有一个图标,但没有选中的项目(rim_icon和文本“RIM”)。我希望3个列表选项出现在点击操作栏图标上。 – 2013-04-24 07:50:09

+0

@VijayAnant你找到一种方法来解决它? – 2013-07-15 04:25:10

6

图标只Spinner是可以实现的,通过几个步骤。

步骤1

把你的XML想要的图标:

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

步骤2

然后,在Spinneradapter,覆盖getView(),这样:

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

说明

我们需要了解getView()在适配器时,不打开Spinner将要使用的视图。由于我们不想看到它,因此我们提供了可见性gone,因此剩下的部分是来自xml的Spinner的背景,在此示例中(步骤1)我已经将其设置为ic_sort_white_24dp

不要与getDropDownView()混淆,getDropDownView()用于在点击Spinner之后下降的选项行。

Bonus Screenshot!

这是我的样子。希望能帮助到你!

screenshot

+1

值得一读的截图! – 2016-09-21 20:48:52

相关问题