- 浏览: 720365 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (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 1887这些术语都是指屏幕的分辨率。 VGA:Video Graph ... -
Android中Java代码和XML布局效率问题
2011-03-30 23:03 3346一般情况下对于Android程序布局我们往往使用XML文件来编 ... -
我服了android APIDemos中的带输入框的对话框
2011-03-28 20:59 2822我今天满怀信心的将AlertDialogSamples类看了很 ... -
Eclipse 安装 Google Android 插件
2011-03-27 15:33 1756已经在EclipseIDE编写android手机软件很长时间了 ... -
Android 小项目之--SQLite 使用法门 (附源码)
2011-03-26 13:47 2838每个应用程序都要使用数据,Android应用程序也不例外,An ... -
关于android的Menu理解
2011-03-26 13:23 1269任何一款软件都少不了 ... -
转载 国内Android 市场调查
2011-03-25 14:46 1476原文地址: http://www.cnbeta.com/art ... -
Android模拟器创建和管理sdcard image文件
2011-03-25 14:23 2504PS:以下操作都是在window系统 1:创建sdcard.i ... -
Android application context/activity context与内存泄露
2011-03-25 00:47 1772在android中context可以作很多操作,但是最主要的功 ... -
Android基础概念Context的作用
2011-03-25 00:42 1753Context字面意思上下文,位于framework pack ... -
Android布局java代码实现求助
2011-03-24 23:39 2430一般情况下对于Android程序布局我们往往使用XML文件来编 ... -
Laucher AndroidManifest.xml
2011-03-23 23:01 11601. permission 和 uses-permission ... -
RelativeLayout的理解
2011-03-23 22:49 1469一、概述 在开发中推荐尽量使用RelativeLayo ... -
windows下通过 DOS命令打开android模拟器实力
2011-03-23 22:29 1943步骤一:打开DOS窗口(cmd),并输入命令,进入文件夹: D ... -
Android预定义样式
2011-03-23 16:04 16921、字体大小 对于能够显示文字的控件(如TextView E ... -
通过适配器给AdapterView绑定数据
2011-03-23 15:39 4616使用AdapterView来绑定数据 AdapterView ... -
android的第一天学习
2011-03-10 22:19 13281:Android中TextView中的字体大小能设置吗? ...
相关推荐
在Android开发中,`TabHost`、`Spinner`和`ListView`是三个非常重要的组件,它们各自承担着不同的功能,并且可以协同工作以提供丰富的用户界面。`TabHost`用于创建多标签界面,`Spinner`则是一种下拉选择菜单,而`...
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) 内存管理,支持选中关闭指定进程
在ActionBar中使用List模式,通常是指在ActionBar中展示下拉列表(Dropdown List),也称为Spinner。这种方式常用于提供一组相关的选项,用户可以点击下拉箭头来选择。 1. **创建SpinnerAdapter**:首先,你需要...
LogCat 用于收集应用程序的日志信息,通过在代码中设置日志点(使用 Log.v()、Log.d()、Log.i()、Log.w() 和 Log.e() 函数),然后在 LogCat 中查看这些信息,以便定位和解决问题。DevTools 是一系列用于调试和测试...
这个项目对于初学者来说是很好的学习材料,有助于理解安卓开发的基本概念和技术。...通过学习和分析这个项目,开发者可以深入理解安卓应用的基本架构和工作原理,同时提高在实际开发中解决问题的能力。
例如,通过在菜单布局文件中使用`android:actionLayout`属性指定一个自定义布局,如`SearchView`,并在活动中处理相应的事件。 5. **使用程序图标进行导航** ActionBar左上角的图标通常作为返回主屏幕或向上导航的...
Android提供了丰富的系统控件,如TextView、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、ListView和TabHost等,这些控件满足了大部分常见的界面需求,同时也支持开发者创建定制控件以满足特殊...
在本案例中,开发者可能使用`TabHost`来创建一个标签页,其中一标签用于进制转换,另一标签可能是教学或示例。 6. **Spinner**:是一个下拉列表控件,用户可以点击后看到可选项并选择一个。在进制转换器中,`...
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实例——...
然而,现在更推荐使用`TabLayout`结合`ViewPager`,因为`TabHost`在新的Android设计支持库中已被弃用。 6. **获取当前的分辨率Demo**: 这涉及到获取设备的屏幕尺寸,通过`DisplayMetrics`对象可以获取宽度和高度...
在这个实例中,你会看到如何配置TabHost,设置各个标签页的内容,并实现标签之间的交互。 4. **GridAndImageSwitcherSample**: GridAndImageSwitcher涉及到了GridView和ImageSwitcher两个组件。GridView是一个可...
1. **ZoomControls**:这是一个用于缩放视图的控件,通常在地图应用中使用。它包含两个按钮,一个用于放大,另一个用于缩小。在XML布局文件中,可以通过`<ZoomControls>`标签添加,如代码所示。在Java代码中,可以...
可以使用Theme.AppCompat的子主题(如`Theme.AppCompat.Light.NoActionBar`)或在XML布局中使用`<androidx.drawerlayout.widget.DrawerLayout>`来动态隐藏或显示ActionBar。 总之,"Android ActionBar Demo"将向...
在Activity中使用`FragmentManager`进行添加、删除或替换Fragment的操作。 3. **PopupWindow** - **定义**:PopupWindow是Android 3.0中提供的一种轻量级窗口,可以在主界面之上弹出一个临时视图。 - **功能**:...
同时,HoloEverywhere还使用了NineOldAndroids库来支持动画效果,确保在API 8及以下版本也能正常工作。 3. **主要功能特性** - **主题兼容性**:支持从Android 2.1开始的所有版本,提供一致的Holo界面。 - **组件...
TabHost 是用于创建带有标签页界面的组件,可以组合多个小部件(如 FrameLayout)到一个视图中,并通过标签在它们之间切换。这对于组织复杂界面和多面板交互非常有用。 3. **Android 控件之 Spinner** Spinner ...
- 使用:用于获取用户输入信息,通常在表单中使用。 3. **Button按钮**: - Button是用户交互中的基本控件,用于触发事件。 - 类的结构:继承自View类。 - 方法:如设置点击事件监听器。 - 属性:用于定义按钮...