- 浏览: 709948 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (204)
- spring (6)
- hibernate (8)
- struts2 (8)
- J2SE (6)
- J2EE (4)
- DataBase (8)
- JQuery (4)
- AJAX (1)
- android (18)
- 软件工程 (3)
- MyEclipse (2)
- 生活 (4)
- QT (1)
- IT (3)
- java综合 (3)
- About PC (2)
- eclipse (3)
- linux (8)
- english (2)
- iPhone (1)
- struts2标签详解 (1)
- 数据库设计准则(第一、第二、第三范式说明) (1)
- DateUtils类提供日期的处理方法 (1)
- 网络 (2)
- 算法 (1)
- java (2)
- OS (1)
- DAO (1)
- WEB (1)
- WebServices (1)
- oracle (1)
- MYSQL (1)
- hadoop (4)
- spark (41)
- scala (8)
- jetty (1)
- news (2)
- maven (1)
- clover (1)
- zookeeper (1)
- hbase (2)
- 微信 (1)
- hive (4)
- zeppelin (2)
- tachyon (2)
最新评论
-
lixuanbin:
iteye已经快要tj了吧。。
iteye为什么不支持markdown? -
haorengoodman:
Tachyon 能在做数据分类吗?例如我有一坨hdfs文件,将 ...
tachyon与hdfs,以及spark整合 -
lee3836:
求源码,大牛
clover分布式任务调度系统 -
cfan37:
...
sparksql与hive整合 -
greemranqq:
9.9 送上,希望博客长久~。~
【【【【【#####>>>>>【关于我】【您·的·支·持·是·我·最·大·的·动·力】<<<<<#####】】】】】
本想昨天晚上写这篇文章,但是我学校的网络真的太不给力了呢!竟然无法打开这个页面啊!!!
述说正文吧:
程序背景:使用TabHost,需要在子界面中添加Spinner按钮。
问题:Spinner按钮不能点击,点击出现unable to add window...is your activity running?的错误。
探索:
由于点击Spinner之后,会弹出一个dropdown item的选项卡,我认为unable to add window应该是这个选项卡没有可以添加上去的activity。从错误的最后一句也能看出程序认为它需要的那个activity并没有在运行。那 Spinner究竟需要哪个activity?哪个activity是当前在运行的?
思前想后,没有想明白。在网上找了些资料,有一个博客上是这么说 AlertDialog.Builder(xxx.this) => AlertDialog.Builder(this.getParent()) 。我按照这个来试了一下,不加this.getParent()会出现上面的错误,加了就没问题。由此可见当前activity应该是tabhost,而不是每个tab对应的activity。
问题又来了,我应该在哪里给Spinner把当前的activity改成this.getParent()?我在程序里是用了 (Spinner)findViewById(...)的。一个简单的方法就是直接用new Spinner(Context context, AttributeSet attributeSet),这里的context用this.getParent()应该行。不过我这人比较懒,不喜欢用AttributeSet,界面的全放到layout里面。
又纠结了一个晚上,看来网上有人说不能用setContentView(R.layout...)。一下子就醒悟过来,肯定是这个家伙在搞鬼,是它生成Spinner的。于是把代码改成下面这样子:
View contentView = LayoutInflater.from(this.getParent()).inflate(R.layout.search_activity, null);
//setContentView(R.layout.search_activity);
setContentView(contentView);
现在问题终于解决了...我只能说不去看一下android的底层实现代码就不能避免这样的囧况(这问题可是困扰了我很久,之前实在搞不定就绕了过去)。
以上红色代码是我在网上找的资料;
按照上面提及的方法我也试了一遍,如果你的程序中Spinner不是放在Dialog中,那个你可以是使用
View contentView = LayoutInflater.from(this.getParent()).inflate(R.layout.search_activity, null);
//setContentView(R.layout.search_activity);
setContentView(contentView);
方法来解决如图1,没有任何问题的。
但是我现在想在Dialog中使用Spinner,按照上面的做法不好用。也许是我了解的不够深入吧。
那个时候我想能不能是android layout XML布局文件的问题,如果我用java代码写一个Dialog对话框(包括:Spinner和EditText组件)。
代码如下:
RelativeLayout myCityRelativeLayout=null;
TextView myProvinceTextView=null;
Spinner myProvinceSpinner=null;
ArrayAdapter<String> myProvinceArrayAdapter=null;
ArrayList<String> provinces=null;
RelativeLayout.LayoutParams myProvinceTextViewLP=null;
Cursor cursor=null;
final Spinner spinner=null;
switch (item.getItemId()) {
case MENU_ADD:
myCityRelativeLayout= new RelativeLayout(CityManagerActivity.this);
//设置相对布局宽度和高度
myCityRelativeLayout.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
//设置相对布局中组件为向左对齐
myCityRelativeLayout.setGravity(Gravity.LEFT);
//定义TextView对象myProvinceTextView、编号为1、内容为省份
myProvinceTextView=new TextView(CityManagerActivity.this);
myProvinceTextView.setId(1);
myProvinceTextView.setText(R.string.province);
//定义myProvinceTextViewLP对象,布局:为顶部布局、跟父类左侧对齐,距左边10px
myProvinceTextViewLP= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
myProvinceTextViewLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
myProvinceTextViewLP.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
myProvinceTextViewLP.setMargins(10, 0, 10, 0);
myCityRelativeLayout.addView(myProvinceTextView,myProvinceTextViewLP);
//定义myProvinceSpinner对象、编号为2
myProvinceSpinner = new Spinner(CityManagerActivity.this);
cursor=DBHelper.getInstance(CityManagerActivity.this).selectProvince();
myProvinceArrayAdapter= new ArrayAdapter<String>(CityManagerActivity.this, android.R.layout.simple_spinner_item);
myProvinceArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
while(cursor.moveToNext())
{
System.out.println(cursor.getString(1));
myProvinceArrayAdapter.add(cursor.getString(1));
}
myProvinceSpinner.setAdapter(myProvinceArrayAdapter);
myProvinceSpinner.setId(2);
provinceName=myProvinceSpinner.getSelectedItem().toString();
//System.out.println(provinceName);
myProvinceSpinner.setOnItemSelectedListener(myProvinceSpinnerListener);
//定义myProvinceSpinnerLP对象,布局:为顶部布局、跟父类左侧对齐、距左边10px、距右边10px
RelativeLayout.LayoutParams myProvinceSpinnerLP= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
myProvinceSpinnerLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
myProvinceSpinnerLP.addRule(RelativeLayout.RIGHT_OF,myProvinceTextView.getId());
myProvinceSpinnerLP.setMargins(10, 0, 10, 0);
myCityRelativeLayout.addView(myProvinceSpinner,myProvinceSpinnerLP);
//定义myCityTextView对象,编号:3、内容:城市
TextView myCityTextView =new TextView(CityManagerActivity.this);
myCityTextView.setText(R.string.city);
myCityTextView.setId(3);
//定义myCityTextViewLP对象,布局:左边跟myProvinceTextView组件对齐、在myProvinceTextView组件下方、距左边10px、距右边10px
RelativeLayout.LayoutParams myCityTextViewLP= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
myCityTextViewLP.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
myCityTextViewLP.addRule(RelativeLayout.BELOW,myProvinceSpinner.getId());
myCityTextViewLP.setMargins(10, 0, 10, 0);
myCityRelativeLayout.addView(myCityTextView,myCityTextViewLP);
//定义myCityEditText对象,编号:4、内容:点击列表的内容
final EditText myCityEditText_add=new EditText(CityManagerActivity.this);
//定义myCityEditTextLP对象,布局:左边跟myCityTextViewLP组件对齐、在myCityTextViewLP组件下方、距左边10px、距右边10px
RelativeLayout.LayoutParams myCityEditTextLP= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
myCityEditTextLP.addRule(RelativeLayout.BELOW,myProvinceSpinner.getId());
myCityEditTextLP.addRule(RelativeLayout.RIGHT_OF,myCityTextView.getId());
myCityEditTextLP.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
myCityEditTextLP.setMargins(10, 0, 10, 0);
myCityRelativeLayout.addView(myCityEditText_add,myCityEditTextLP);
//定义对话框
new AlertDialog.Builder(CityManagerActivity.this)
.setView(myCityRelativeLayout)
.setIcon(R.drawable.add)
.setTitle(R.string.add_city)
.setPositiveButton(R.string.add, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String cityName=myCityEditText_add.getText().toString();
if(cityName==null||cityName.trim().length()==0)
{
Toast.makeText(CityManagerActivity.this, "城市不能为空!!!", Toast.LENGTH_LONG);
}else{
Integer provinceId=null;
if(provinceName!=null)
{
Cursor cursor=DBHelper.getInstance(CityManagerActivity.this).selectProvinceByName(provinceName);
while(cursor.moveToNext())
{
provinceId=cursor.getInt(0);
}
}
Province province= new Province();
province.setId(provinceId);
City city= new City();
city.setName(cityName);
city.setProvince(province);
DBHelper.getInstance(CityManagerActivity.this).addCity(city);
}
}
})
.setNegativeButton(R.string.cancel, null)
.show();
break;
当我再次运行这个项目时候,终于达到预期的效果了呢!!!我很高兴!!!
就这个问题已经困扰我好几个小时呢,刚开始我还以为Spinner那部分代码有问题呢,我啊,各种改啊,就是没有解决啊。我竟然都开始怀疑自己的能力呢!!!
从这个问题我体会到:
1:不要太依赖android的布局文件,有时候你可以考虑自己手动编写布局代码;
2:如果有些地方不了解,可以考虑看android Samples实例代码或者看源码;
3:当发现问题,看控制台的异常,然后将关键部分去goolge网上去搜索;
4:Never give up 方法总比问题多,要静下心去慢慢解决,既然选择这行,就要去坚持下去。
发表评论
-
Android屏幕分辨率详解(VGA、HVGA、QVGA、WVGA、WQVGA)
2011-03-31 20:44 1846这些术语都是指屏幕的分辨率。 VGA:Video Graph ... -
Android中Java代码和XML布局效率问题
2011-03-30 23:03 3302一般情况下对于Android程序布局我们往往使用XML文件来编 ... -
我服了android APIDemos中的带输入框的对话框
2011-03-28 20:59 2785我今天满怀信心的将AlertDialogSamples类看了很 ... -
Eclipse 安装 Google Android 插件
2011-03-27 15:33 1724已经在EclipseIDE编写android手机软件很长时间了 ... -
Android 小项目之--SQLite 使用法门 (附源码)
2011-03-26 13:47 2795每个应用程序都要使用数据,Android应用程序也不例外,An ... -
关于android的Menu理解
2011-03-26 13:23 1228任何一款软件都少不了 ... -
转载 国内Android 市场调查
2011-03-25 14:46 1430原文地址: http://www.cnbeta.com/art ... -
Android模拟器创建和管理sdcard image文件
2011-03-25 14:23 2457PS:以下操作都是在window系统 1:创建sdcard.i ... -
Android application context/activity context与内存泄露
2011-03-25 00:47 1734在android中context可以作很多操作,但是最主要的功 ... -
Android基础概念Context的作用
2011-03-25 00:42 1721Context字面意思上下文,位于framework pack ... -
Android布局java代码实现求助
2011-03-24 23:39 2380一般情况下对于Android程序布局我们往往使用XML文件来编 ... -
Laucher AndroidManifest.xml
2011-03-23 23:01 11261. permission 和 uses-permission ... -
RelativeLayout的理解
2011-03-23 22:49 1427一、概述 在开发中推荐尽量使用RelativeLayo ... -
windows下通过 DOS命令打开android模拟器实力
2011-03-23 22:29 1899步骤一:打开DOS窗口(cmd),并输入命令,进入文件夹: D ... -
Android预定义样式
2011-03-23 16:04 16501、字体大小 对于能够显示文字的控件(如TextView E ... -
通过适配器给AdapterView绑定数据
2011-03-23 15:39 4578使用AdapterView来绑定数据 AdapterView ... -
android的第一天学习
2011-03-10 22:19 12941:Android中TextView中的字体大小能设置吗? ...
相关推荐
Android TabHost ListView初学者的实例代码
getHost()获取前提 : 设置了该id之后, 在Activity界面可以使用 getHost(), 获取这个TabHost 视图对象; 示例 : 代码如下: <tabhost android:id=”@android:id/tabhost” android:layout_height=”match_parent”
Spinner(Spinner)的使用.doc、 Tab与TabHost.pdf、 按钮(Button)的使用.doc、 单选框(RadioButton)的使用.doc、 等级条(RatingBar)的使用.doc、 复选框(CheckBox)的使用.doc、 进度条(ProgressBar)的使用.doc、 可...
仿Win8可拖拽界面 自定义Spinner、自定义顶栏和副顶栏(包括三个下拉操作) 支持选项卡(使用的是TabHost,比较老的方式,现在已经不提倡了,看看就好,推荐使用fragment) 内存管理,支持选中关闭指定进程
这是一个安卓的简单天气预报 包含本地的登录注册 使用spinner切换城市 tabhost底部导航 fragment的简单使用等 很适合新手作业
5.2.12使用下拉列表框——Spinner 5.2.13实例——请选择工作年限 5.2.14实例——动态修改Spinner项 5.2.15 使用进度条——ProgressBar 5.2.16实例——动态修改进度条 5.2.17使用拖动条——SeekBar 5.2.1 8实例——...
5.2.12使用下拉列表框——Spinner 5.2.13实例——请选择工作年限 5.2.14实例——动态修改Spinner项 5.2.15 使用进度条——ProgressBar 5.2.16实例——动态修改进度条 5.2.17使用拖动条——SeekBar 5.2.1 8实例——...
6.28 TabHost卡片的使用 6.29 ViewStub惰性装载控件 6.30 ViewPager多页面滑动效果一 6.31 ViewPager多页面滑动效果二 6.32 ListView普通列表控件的使用 6.33 适配器结合ListView控件的使用 七、百度地图实战开发 ...
这个例子中涉及到ListView、各个界面UI控件的使用、TabHost、跑马灯字符串、获取经纬度、Spinner内容适配器、气球图片、全屏显示、标题栏跑马灯的实现、捕获和打印异常、从TabActivity上面获取放置Tab的TabHost、...
12.3.1 在Android应用中使用 OpenGL ES 454 12.3.2 绘制平面上的多边形 457 12.3.3 旋转 463 12.4 绘制3D图形 465 12.4.1 构建3D图形 465 12.4.2 应用纹理贴图 469 12.5 本章小结 475 第13章 ...
12.3.1 在Android应用中使用 OpenGL ES 454 12.3.2 绘制平面上的多边形 457 12.3.3 旋转 463 12.4 绘制3D图形 465 12.4.1 构建3D图形 465 12.4.2 应用纹理贴图 469 12.5 本章小结 475 第13章 Android的网络应用 476 ...
12.3.1 在Android应用中使用 OpenGL ES 454 12.3.2 绘制平面上的多边形 457 12.3.3 旋转 463 12.4 绘制3D图形 465 12.4.1 构建3D图形 465 12.4.2 应用纹理贴图 469 12.5 本章小结 475 第13章 Android的网络应用 476 ...
Spinner; DatePicker、TimePicker; ProgressBar; SeekBar; RatingBar; TabHost; ScrollView; ListView、ListActivity; ExpandableListView; GridView、ImageSwitcher; Gallery; 2.5、对话框:AlertDialog; ...
Spinner; DatePicker、TimePicker; ProgressBar; SeekBar; RatingBar; TabHost; ScrollView; ListView、ListActivity; ExpandableListView; GridView、ImageSwitcher; Gallery; 2.5、对话框:AlertDialog; ...
该android源文件包括:AutoCompleteTextView、CheckButton、Clock、DataPicker、TimePicker、EditText、Gallary、ImageButton、ImageView、ListView、ProgressBar、RatingBar、SeekBar、Spinner、TabHost、TextView...
[Android1_5]标签TabHost图片文字覆盖的问题 - 农民伯伯 - 博客园.mht374.72 KB [Android1_6]动态添加View的问题 - 农民伯伯 - 博客园.mht371.67 KB [Android1_6]继承BaseAdapter为GridView设置数据时设置...
Adapter和AdapterView Spinner(下拉列表) ListView(列表) GridView(网格) Gallery(画廊) SlidingDrawer(滑动抽屉) AutoCompleteTextView(自动完成) TabHost(分页视图)
此程序是android下开发的二进制,八进制,十进制十六进制转换,另外一个tab可以直接忽略,想学习tabhost spinner的人也可以看一下