2013-04-24 38 views
6

Tôi đang làm việc trên một ứng dụng có thanh tác vụ để điều hướng. Bây giờ tôi đang cố gắng thêm một số Spinner vào số ActionBar.Thanh hành động Spinner chỉ có biểu tượng chứ không phải tùy chọn được chọn

Tôi có thể nhận biểu tượng tùy chỉnh của mình trên ActionBar. Nhưng khi tôi thêm các mục vào hộp xoay, biểu tượng được ẩn đằng sau hộp lựa chọn với mục đầu tiên được chọn.

Tôi muốn chỉ có biểu tượng trong số ActionBardrop-down-list/spinner xuất hiện khi nhấn vào biểu tượng.

Đây là mã của tôi:

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

đọc này: http://developer.android.com/guide/topics/ui/actionbar.html –

Trả lời

0

việc kiểm tra này làm việc của nó ..

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; 

    } 

} 

nếu bạn muốn chỉ biểu tượng sau đó chỉ cần sử dụng xem hình ảnh trong scan_row1.xml

+0

Cảm ơn @Dhawal. Tôi đã có được màn hình này. Những gì tôi đang cố gắng để đạt được là chỉ có một biểu tượng trên thanh hành động nhưng không phải là mục đã chọn (rim_icon và văn bản "RIM). Tôi muốn 3 tùy chọn danh sách xuất hiện trên khai thác biểu tượng thanh hành động. –

+0

@VijayAnant đã làm bạn tìm cách để giải quyết nó? –

1

Trong bộ điều hợp, bạn cần ghi đè getDropDownView(). Điều đó sẽ cung cấp chế độ xem được sử dụng trong các hàng của spinner. getView() sau đó sẽ trả về một ImageView cho biểu tượng của bạn.

Xem những 2 câu trả lời về câu hỏi tương tự để biết thêm chi tiết và các ví dụ:

6

Biểu tượng chỉ Spinner có thể đạt được thông qua một vài bước.

Bước 1

Đặt biểu tượng mà bạn muốn trong xml:

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

Bước 2

Sau đó, trong adapter của Spinner, ghi đè getView(), như thế này :

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

Giải thích

Chúng ta cần phải hiểu rằng getView() trong adapter là quan điểm cho rằng sẽ được sử dụng khi Spinner không được mở ra. Chúng tôi làm cho tầm nhìn gone bởi vì chúng tôi không muốn nhìn thấy nó, để những gì còn lại là nền tảng của Spinner từ xml, mà tôi đã đặt thành ic_sort_white_24dp trong ví dụ này (Bước 1).

Không được kết hợp với getDropDownView() được sử dụng cho các hàng tùy chọn sẽ thả xuống sau khi nhấp chuột Spinner.

Ảnh chụp màn hình thưởng!

Đây là diện mạo của tôi. Hy vọng nó giúp!

screenshot

+1

Giá trị đọc cho ảnh chụp màn hình một mình! –