popwindow和spinner的用法
来源:互联网 发布:火爆网络雅典娜 编辑:程序博客网 时间:2024/06/06 01:42
在popwindow里加上spinner会报错,E/AndroidRuntime(6943): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@4670d3b8 is not valid; is your activity running? 原因是当你点击spinner的时候,弹出的窗口找不到它的依附的点,也就是找不到当前activity的上下文,所以会报错。解决方法有多种如下
1,最简便的改进方法就是更改spinner弹出窗口的mode,在xml中设置spinner的spinnerMode为dialog即可,虽然样式很原始,但是是可以解决崩溃的问题的。
private void showPopupWindow() { //设置contentView View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popupwindow, null); Button mPopbtn = (Button) contentView.findViewById(R.id.button); Spinner mPopSpinner = (Spinner) contentView.findViewById(R.id.spinner); //数据 ArrayList<String> data_list = new ArrayList<String>(); data_list.add("一般报警"); data_list.add("图片报警"); data_list.add("视频包括"); data_list.add("设备报警"); //适配器 ArrayAdapter<String> arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data_list); //设置样式 //arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //加载适配器 mPopSpinner.setAdapter(arr_adapter); mPopbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(getApplication(),MainActivity.class)); } }); mPopWindow = new PopupWindow(contentView, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, true); mPopWindow.setContentView(contentView) ; //显示PopupWindow // main.setVisibility(View.INVISIBLE); View rootview = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null); mPopWindow.showAtLocation(rootview, Gravity.CENTER,0 , 0); // 点击其他地方消失 contentView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (mPopWindow != null && mPopWindow.isShowing()) { mPopWindow.dismiss(); mPopWindow = null; } return false; } });}
布局文件设置模式就好了如图
<Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:spinnerMode="dialog" android:layout_height="60dp" android:layout_gravity="center" android:layout_marginTop="50dp"></Spinner>
2.可以用popwindowl来的代替spinner,showasdropdown(),
ublic
class
PopWindowSpinnerActivity
extends
Activity {
//下拉按钮
TextView MyButton;
//PopupWindow对象声明
PopupWindow pw;
ArrayList<String> list;
//当前选中的列表项位置
int
clickPsition = -
1
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_pop_window);
MyButton = (TextView) findViewById(R.id.myButton);
//获得要显示的数据
list = getList();
//设置默认显示的Text
MyButton.setText(list.get(
0
));
MyButton.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
//通过布局注入器,注入布局给View对象
View myView = getLayoutInflater().inflate(R.layout.pop,
null
);
//通过view 和宽·高,构造PopopWindow
pw =
new
PopupWindow(myView,
240
,
300
,
true
);
pw.setBackgroundDrawable(getResources().getDrawable(
//此处为popwindow 设置背景,同事做到点击外部区域,popwindow消失
R.drawable.diaolog_bg));
//设置焦点为可点击
pw.setFocusable(
true
);
//可以试试设为false的结果
//将window视图显示在myButton下面
pw.showAsDropDown(MyButton);
ListView lv = (ListView) myView.findViewById(R.id.lv_pop);
lv.setAdapter(
new
ListViewAdapter(PopWindowSpinnerActivity.
this
, list));
lv.setOnItemClickListener(
new
AdapterView.OnItemClickListener() {
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
MyButton.setText(list.get(position));
if
(clickPsition != position) {
clickPsition = position;
}
pw.dismiss();
}
});
}
});
}
/**
* 得到list集合的方法
* @return
*/
public
ArrayList<String> getList() {
ArrayList<String> list =
new
ArrayList<String>();
list.add("一般报警"); list.add("图片报警"); list.add("视频包括"); list.add("设备报警")
return
list;
}
}
0 0
- popwindow和spinner的用法
- Spinner 和 ArrayAdapter 的用法
- AutoCompleteTextView和Spinner的用法
- Spinner的功能和用法
- 自定义popwindow的spinner下拉列表
- Android之Spinner的功能和用法
- Spinner的简单功能和用法
- Spinner VS popwindow
- Spinner 的用法
- Spinner的用法
- Spinner的用法实现
- Spinner 的简单用法
- Spinner的一些用法
- Spinner的用法
- spinner的用法
- Spinner的用法
- spinner 的用法总结
- Spinner的用法
- MySQL中使用SET类型快速插入中文字符串
- 人工智能---alphabeta剪枝算法实现AI井子棋
- 【DWT笔记】傅里叶变换与小波变换
- 正则表达式入门
- Java中,public class与class,以及main函数的一些说明
- popwindow和spinner的用法
- Java基于注解和反射导入导出Excel(Bean转Excel,Excel转Bean)
- Spark 生产开发环境搭建 Git + Maven + IDEA
- Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
- 分布式存储Ceph
- 第一篇博客
- mysql安装及编码问题
- 书单
- python学习--下载--下载固定文件显示下载百分之的进度