Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 操作栏中的微调器,仅具有图标,不具有选定选项_Android_Android Actionbar_Spinner - Fatal编程技术网

Android 操作栏中的微调器,仅具有图标,不具有选定选项

Android 操作栏中的微调器,仅具有图标,不具有选定选项,android,android-actionbar,spinner,Android,Android Actionbar,Spinner,我正在开发一个带有导航操作栏的应用程序。现在,我正在尝试将微调器添加到操作栏 我可以在操作栏上获得我的自定义图标。但是,当我将条目添加到微调器中时,图标隐藏在选择框后面,第一个项目处于选中状态 我只希望点击图标时,ActionBar中的图标和下拉列表/spinner 这是我的代码: private void initializeMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate

我正在开发一个带有导航操作栏的应用程序。现在,我正在尝试将
微调器添加到
操作栏

我可以在
操作栏
上获得我的自定义图标。但是,当我将条目添加到微调器中时,图标隐藏在选择框后面,第一个项目处于选中状态

我只希望点击图标时,
ActionBar
中的图标和
下拉列表/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); 
}
private void初始化菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。选项,菜单);
View v=(View)menu.findItem(R.id.menuSort.getActionView();
微调器微调器=(微调器)v.findViewById(R.id.bookmarks\u菜单);
书签书签1=新书签();
书签书签2=新书签();
列表=新的ArrayList();
添加(书签1);
添加(书签2);
SpinadAdapter=新的SpinadAdapter(getApplicationContext(),0,列表);
旋转器。设置适配器(适配器);
}

检查此项是否正常工作

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;

    }

}

公共类MainActivity扩展活动{
最后的字符串[]选项={“Android”、“iOS”、“RIM”};
final int[]choices_img={R.drawable.ic_启动器,R.drawable.ios,
R.drawable.black};
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar ActionBar=getActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u列表);
ArrayAdapter适配器=新的ArrayAdapter(
MainActivity.this,android.R.layout.simple\u下拉列表\u item\u 1line,
选择);
ListViewAdapter adapter1=新的ListViewAdapter(MainActivity.this);
actionBar.setListNavigationCallbacks(适配器1,
新的OnNavigationListener(){
@凌驾
公共布尔值onNavigationItemSelected(int-itemPosition,
长项目ID){
Toast.makeText(MainActivity.this,
选项[itemPosition],Toast.LENGTH\u SHORT)
.show();
返回false;
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共类ListViewAdapter扩展了BaseAdapter{
私人停车场;
公共ListViewAdapter(上下文con){
//TODO自动生成的构造函数存根
mInflater=LayoutFlater.from(con);
}
public int getCount(){
//TODO自动生成的方法存根
返回选项。长度;
}
公共对象getItem(int位置){
//TODO自动生成的方法存根
//返回产品_id1.size();
返回位置;
}
公共长getItemId(int位置){
//TODO自动生成的方法存根
//返回product_id1.get(position).hashCode();
返回位置;
}
@SuppressLint(“新API”)
公共视图getView(最终整型位置,视图转换视图,
视图组(父级){
//TODO自动生成的方法存根
最终清单内容持有者;
视图v=转换视图;
如果(v==null){
v=最小充气量(R.layout.scan_row1,空);
holder=新的ListContent();
holder.name=(TextView)v.findViewById(R.id.textView1);
holder.img_p=(ImageView)v.findViewById(R.id.imageView1);
//持有人。总利率。设置点击监听器(mOnTitleClickListener1);
v、 setTag(支架);
}否则{
holder=(ListContent)v.getTag();
}
holder.img\u p.setBackground(getResources().getDrawable(
选择(职位);;
holder.name.setText(“+选项[位置]);
返回v;
}
}
静态类ListContent{
图像视图img\u p;
文本视图名称;
}
}

如果您只需要一个图标,那么只需在适配器的scan_row1.xml中使用image view,您需要覆盖getDropDownView()。这将提供微调器行中使用的视图。然后,getView()应返回图标的ImageView

有关更多详细信息和示例,请参见以下两个类似问题的答案:


只有图标
微调器
可以通过几个步骤实现

步骤1

将所需的图标放在xml中:

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

我们需要了解,适配器中的
getView()
是未打开
微调器时将使用的视图。我们使可见性消失了,因为我们不想看到它,所以剩下的是xml中
微调器的背景,在本例中,我已经将其设置为
ic\u sort\u white\u 24dp
(步骤1)

不要与
getDropDownView()
混淆,后者用于单击
微调器后将下拉的选项行

奖金截图

这就是我的样子。希望有帮助


阅读以下内容:谢谢@Dhawal。我设法得到了这个屏幕。我试图实现的是在操作栏上只有一个图标,而不是所选项目(rim_图标和文本“rim”)。我希望在点击操作栏图标时显示3个列表选项。
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;
        }
};