Show dropdown programmatically in ActionBar / ActionBarSherlock

后端 未结 2 438
闹比i
闹比i 2020-12-09 20:10

I have an activity using ActionBarSherlock with ActionBar.NAVIGATION_MODE_LIST.

When entering the page I want the spinner in the action bar

相关标签:
2条回答
  • 2020-12-09 20:41

    The best and easy way to implement this functionality by extending StringAdapter if you are using it. Otherwise you can take any adapter whichever you are using.

    Steps :

    • create an adapter

         class ListNavigationAdapter extends ArrayAdapter<String>{
      
      public Spinner mSpinner; // This is the spinner which is used in actionbar
      
      public ListNavigationAdapter(Context context,
              int resource,
              int textViewResourceId, 
              String[] objects) {
          super(context, resource, 
                  textViewResourceId, objects);
          // TODO Auto-generated constructor stub
      }
      
      @Override
      public View getView(int position, 
              View convertView, 
              ViewGroup parent) {
          // TODO Auto-generated method stub
      
          mSpinner = (Spinner) parent;
      
          return super.getView(position, convertView, parent);
      }
      

      }

    • set an adapter to actionbar

    // Set up the action bar to show a dropdown list.
        actionBar = getSupportActionBar();
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    
        // Set up the dropdown list navigation in the action bar.
        actionBar.setListNavigationCallbacks(
                // Specify a SpinnerAdapter to populate the dropdown list.
              mAdapter = new ListNavigationAdapter(
                        actionBar.getThemedContext(),
                        android.R.layout.simple_list_item_1,
                        android.R.id.text1,
                        new String[] {
                                getString(R.string.title_1),
                                getString(R.string.title_2)
                        }),
                this);
    
    • if you want to open it as screen open, just use below mentioned code

    @Override public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        ...........
    
        if(mAdapter.mSpinner != null){
          mAdapter.mSpinner.performClick();
        }
        return true;
    }
    

    Try this . It works (Y)

    0 讨论(0)
  • 2020-12-09 20:50

    Here is code how I create custom action bar with actiobBarSherlock

     private void createCustomActionBar() {
    
        List<SiteLink> links = new ArrayList<SiteLink>();
        links.add(...)  
        LinksAdapter linkAdapter = new LinksAdapter(this, R.layout.external_link, links);
    
        View customNav = LayoutInflater.from(this).inflate(R.layout.custom_show_action_bar, null);
        IcsSpinner spinner = (IcsSpinner)customNav.findViewById(R.id.spinner);
        spinner.setAdapter(linkAdapter);
    
    
        ImageView refresh = (ImageView) customNav.findViewById(R.id.refresh);
        refresh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ...
            }
        });
    
        ImageView settings = (ImageView) customNav.findViewById(R.id.settings);
        settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ...
            }
        });
    
        getSupportActionBar().setCustomView(customNav, new ActionBar.LayoutParams(Gravity.RIGHT));
        getSupportActionBar().setDisplayShowCustomEnabled(true);
    
    }
    

    Adapter

    private static class LinksAdapter extends ArrayAdapter<SiteLink> {
    
        private List<SiteLink> strings;
        private Context context;
    
        private LinksAdapter(Context context, int textViewResourceId, List<SiteLink> objects) {
            super(context, textViewResourceId, objects);
            this.strings = objects;
            this.context = context;
        }
    
        @Override
        public int getCount() {
            if (strings == null) return 0;
            return strings.size();
        }
    
        @Override
        public SiteLink getItem(int position) {
            return super.getItem(position);
        }
    
    
        // return views of drop down items
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
    
            final SiteLink siteLink = strings.get(position);
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // at 0 position show only icon
    
            TextView site = (TextView) inflater.inflate(R.layout.external_link, null);
            site.setText(siteLink.getName());
    
            site.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(siteLink.getUrl()));
                    context.startActivity(i);
                }
            });
            return site;
    
    
        }
    
    
        // return header view of drop down
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            return inflater.inflate(R.layout.icon, null);
        }
    }
    

    Layout

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                   android:gravity="right"
            >
    
    
        <com.actionbarsherlock.internal.widget.IcsSpinner
            android:id="@+id/spinner"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingRight="20dp"
            android:layout_gravity="center"
                />
    
         <ImageView  android:layout_width="fill_parent"
                     android:layout_height="fill_parent"
                     android:src="@drawable/ic_navigation_refresh"
                     android:paddingRight="20dp"
                     android:paddingLeft="10dp"
                     android:layout_gravity="center"
                     android:background="@drawable/action_buttons_background"
                     android:id="@+id/refresh"/>
    
    
        <ImageView  android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:src="@drawable/ic_action_settings"
                    android:paddingRight="20dp"
                    android:background="@drawable/action_buttons_background"
                    android:layout_gravity="center"
                    android:id="@+id/settings"/>
    
    </LinearLayout>
    

    to expand spinner call

     (getSupportActionBar().getCustomView().findViewById(R.id.spinner)).performClick();
    
    0 讨论(0)
提交回复
热议问题