博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android弹窗中的spinner异常解决办法
阅读量:6850 次
发布时间:2019-06-26

本文共 3838 字,大约阅读时间需要 12 分钟。

弹窗常用AlertDialog来袜,因为AlertDialog可以很方便的添加所要的项。比如确定/取消按钮,自定义的标题栏、自定义的信息布局等。在自定义布局时,比如我们采用LinearLayout来布局,然后再往LinearLayout中添加一些项,比如TextView、EditText等。这些都很容易实现。

不过,如果添加spinner,可能就会出问题了。找了很久,发现是context引起的。因为spinner在点击展开下拉列表时,需要依赖于窗体,而使用context只是提供了一个上下文,并没有提供窗体,所以会造成错误。下面是已实现的代码:

package com.sparkle;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.graphics.Color;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.Spinner;import android.widget.SpinnerAdapter;import android.widget.TextView;public class Contury {	private Activity _activity = null;	private Context _context = null;	private Spinner _spinner = null;	public Contury(Activity activity) {		_activity = activity;		_context = activity;			}	private LinearLayout GenerateLinearLayout(int orientation) {		LinearLayout linearLayout = new LinearLayout(_context);		linearLayout.setPadding(16, 16, 16, 16);		linearLayout.setOrientation(orientation);		return linearLayout;	}	@SuppressWarnings("deprecation")	private Spinner GenerateSpinner() {		Spinner spinner = new Spinner(_activity);		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(				LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);		spinner.setLayoutParams(layoutParams);		return spinner;	}	public void Popup() {		Builder alertDialogBuilder = new AlertDialog.Builder(_activity);		View view = GenerateLayout();		alertDialogBuilder.setView(view);		alertDialogBuilder.setPositiveButton("OK",				new DialogInterface.OnClickListener() {					@Override					public void onClick(DialogInterface dialog, int which) {						Log.e("TEST","OK");					}				});		alertDialogBuilder.setNegativeButton("Cancel", null);		Dialog alertDialog = alertDialogBuilder.create();		alertDialog.show();	}	private View GenerateLayout() {		LinearLayout linearLayout = GenerateLinearLayout(LinearLayout.VERTICAL);		LinearLayout messageLinearLayout = GenerateMessageLayout();		linearLayout.addView(messageLinearLayout);		return linearLayout;	}	private LinearLayout GenerateMessageLayout() {		LinearLayout linearLayout = GenerateLinearLayout(LinearLayout.HORIZONTAL);		_spinner = GenerateSpinner();		_spinner.setAdapter(new CityAdapter(_activity));				_spinner.setSelection(0);		linearLayout.addView(_spinner);		return linearLayout;	}		private class CityAdapter extends BaseAdapter implements SpinnerAdapter {		private Context _con=null;		private String[] _cities=null;				public CityAdapter(Context context)		{			_con=context;			_cities=_con.getResources().getStringArray(					R.array.cities);		}		        @Override        public int getCount() {        	if(_cities==null)        	{        		return 0;        	}            return _cities.length;        }        @Override        public Object getItem(int position) {        	if(_cities==null||_cities.length<=0)        	{        		return null;        	}            return _cities[position];        }        @Override        public long getItemId(int position) {            return position;        }  		@Override		public View getView(int position, View convertView, ViewGroup parent) {			TextView textView=new TextView(_con);			textView.setTextColor(Color.BLACK);			textView.setTextSize(20);			textView.setText(_cities[position]);			return textView;		}		    }}
注:

1、spinner和AlertDialog的new需使用activity,使用context将在弹出下拉菜单时造成错误。

2、_con.getResources().getStringArray(R.array.cities)是加载xml中定义的数组。

city.xml(位于values文件夹下)

厦门
北京
上海

转载于:https://www.cnblogs.com/sparkleDai/p/7605006.html

你可能感兴趣的文章
一 网络概述 每天记录一点点
查看>>
oracle 阻塞会话的查看与解除
查看>>
这个分类为Linux学习笔记
查看>>
java并发编程实践
查看>>
【学习笔记】Android的线程和线程池
查看>>
SAP相关网站
查看>>
Linux系统管理(一)安装Linux操作系统
查看>>
python获取外网IP并发邮件
查看>>
vscode+typescript开发环境搭建
查看>>
浅谈SQL SERVER中事务的ACID
查看>>
设置expire_logs_days自动删除
查看>>
Nginx安装过程(Linux)
查看>>
Redis中中文内容显示十六进制字符串处理
查看>>
去硬件、拼内容,IT巨头们的下一站?
查看>>
我的友情链接
查看>>
2015年下半年系统集成项目管理工程师培训感想
查看>>
命令模式
查看>>
Python精简笔记-[1] 从安装到编辑器的使用
查看>>
VMwareESX/ESXi 精简置备(thin)与厚置备(thick)虚拟机磁盘之间转换
查看>>
迭代器模式
查看>>