widget中自动横竖屏切换时的问题

1 2 下一页
返回列表 发新帖
查看:  5780 | 回复:  18
打印  上一主题  下一主题
收起左侧

widget中自动横竖屏切换时的问题 

[复制链接]
   

该用户从未签到

3

主题

34

帖子

42

e币
跳转到指定楼层
楼主
  发表于 2009-6-20 09:30:20  |  只看该作者  回帖奖励

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe 

x
各位大大,有什么方法能获取到屏幕切换的事件?请教高人指点,现在我每次切换屏幕方向后,所有的东西都不跑了。onUpdate也不跑了。。真没办法了。。

评分

参与人数 1 e望 +2 收起理由
 游利卡 + 2  

查看全部评分

 
   

该用户从未签到

384

主题

776

帖子

2524

e币
沙发
  发表于 2009-6-22 03:55:05  |  只看该作者
pcr 好像 有方法 
上次 不知道在哪 听他提到过
 
 
   

该用户从未签到

3

主题

34

帖子

42

e币
板凳
  楼主 |  发表于 2009-6-22 17:28:24  |  只看该作者
现在我知道这个问题是因为在onReceive (Context context, Intent intent)函数中,我用
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
   AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
   ComponentName thisWidget = new ComponentName(context,Act_Lastfm.class);
   appWidgetManager.updateAppWidget(thisWidget, views);
来刷新了屏幕造成的,关键是appWidgetManager.updateAppWidget(thisWidget, views);这一句,只要调了这一句,然后再进行屏幕的切换问题就出现了。不调这一句,怎么切换都不会有问题。。。可惜,还没找到是为什么。。。。

评分

参与人数 1 e望 +2 收起理由
 游利卡 + 2  

查看全部评分

 
 
   

该用户从未签到

57

主题

399

帖子

738

e币
地板
  发表于 2009-6-22 22:02:18  |  只看该作者
android是可以自动处理横竖屏切换,匹配相应的配置文件,
如果你在res下面追加一个layout-land文件夹,
就可以在里面放置横屏的xml布局文件。
当然文件名要和layout里面的对应起来。

评分

参与人数 1 e望 +1 收起理由
 游利卡 + 1  

查看全部评分

 
 
   
pcr

该用户从未签到

8

主题

292

帖子

580

e币
5
  发表于 2009-6-22 23:10:25  |  只看该作者
哈,今天画完画就去洗澡了,来晚了。

大致看了一下,LZ的问题貌似是应用widget时出了一些问题。
这回要让@游利卡 失望了,我接触Android的时间并不长,还不到一个月。因此,大多的研究集中在Activity和一些View上,还没有向Widget进军,计划是下下个星期开始研究Widget。

没帮上LZ的忙,还说这么多废话很抱歉!将来有机会一起研究。

评分

参与人数 1 e望 +1 收起理由
 游利卡 + 1  

查看全部评分

 
 
   

该用户从未签到

3

主题

34

帖子

42

e币
6
  楼主 |  发表于 2009-6-25 22:55:48  |  只看该作者
这个问题解决了,虽然不知道造成问题的具体原因,不过总算解决了。
问题是因为在onReceive (Context context, Intent intent)函数中,用
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
   AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
   ComponentName thisWidget = new ComponentName(context,Act_Lastfm.class);
   appWidgetManager.updateAppWidget(thisWidget, views);
刷新了屏幕,导致widget丢失掉,所以就把所有的刷新动作都放到onUpdate()函数最后去做,onReceive()函数中接受到广播后的所有的操作,都存放到数据库中去,然后发送UPDATE的广播给自己。widget就会自动调用onUpdate()函数,进行刷新。这样就没问题了。
 
 
   
pcr

该用户从未签到

8

主题

292

帖子

580

e币
7
  发表于 2009-6-26 01:03:06  |  只看该作者
哦,原来LZ遇到的又是相异线程互相刷新屏幕,导致刷新失效的问题。
 
 
   

该用户从未签到

3

主题

34

帖子

42

e币
8
  楼主 |  发表于 2009-6-26 12:33:38  |  只看该作者
还是刷新屏幕的老问题,又出现了。。我的widget有4个TextView,现在想做的效果是我选中的TextView会变红。

首先设置了对第一个TextView的监听:

mIntent_Click_Row1  = new Intent("nicdy.widget.layouta.CLICK_ROW1");
mPIntent_Click_Row1 = PendingIntent.getBroadcast(context, 0, mIntent_Click_Row1, 0);
views.setOnClickPendingIntent(R.id.row1, mPIntent_Click_Row1);


public void onReceive (Context context, Intent intent) {
                super.onReceive(context, intent);
                String action = intent.getAction();
if (action.equals("nicdy.widget.layouta.CLICK_ROW1")) {
        //设置当前选中的行ID为0,存入数据库
        BaseData mBaseData = new BaseData( context, "Main.db", 1 );
        mBaseData.UpdateWidgetState("0");                        
        mBaseData.CloseDB();
        //发送UPDATE广播
        Intent mIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        context.sendBroadcast(g_mIntent);
}else if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {

         Bundle extras = intent.getExtras();
                if (extras != null) {
                    int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
                    if (appWidgetIds != null && appWidgetIds.length > 0) {
                            g_mIntent = intent;
                        this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
                        
                    }
                }
}
每次按下第一行,进到AppWidgetManager.ACTION_APPWIDGET_UPDATE里的时候extras 总是为null,这个怎么解决呢?
 
 
   

该用户从未签到

0

主题

21

帖子

27

e币
9
  发表于 2009-6-28 20:41:27  |  只看该作者
帮你顶
希望有人能帮你解决
 
 
   
pcr

该用户从未签到

8

主题

292

帖子

580

e币
10
  发表于 2009-6-28 21:38:19  |  只看该作者
本帖最后由 pcr 于 2009-6-28 21:46 编辑

还没开始正式研究widget,所以可能回答的不对,只是给LZ些建议。

这个问题貌似是用法错误:
在onReceive里获得的Intent应该就是第一行楼主new出来Intent的同构体。
因此intent.getExtras();时,它所获得的bundle一般都是用户自己装入的,不会是系统载入的。
所以猜测LZ的getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);应该用intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)来替换。

另外看了楼主的需求,如果只是“选中的TextView会变红”这个需求,如果是在Activity里,用xml配合drawable里的android:state_focused属性和android:state_selected属性,不需要java code参与应该就能实现,不知道widget是不也是这样(都是textview,应该差不多吧?)。当然文字color的话,也有类似的方法。
 
 
   

该用户从未签到

3

主题

34

帖子

42

e币
11
  楼主 |  发表于 2009-6-29 11:45:45  |  只看该作者
本帖最后由 nicdy 于 2009-6-29 11:47 编辑
还没开始正式研究widget,所以可能回答的不对,只是给LZ些建议。

这个问题貌似是用法错误:
在onReceive里获得的Intent应该就是第一行楼主new出来Intent的同构体。
因此intent.getExtras();时,它所获得的bundle一 ...
pcr 发表于 2009-6-28 21:38



正确。哈哈,最后是看了music的widget的源码,发现原来它用了2个刷新,如果id存在就用updateAppWidget(int[] appWidgetIds, RemoteViews views) 刷新,如果ID不存在就用的updateAppWidget(ComponentName provider, RemoteViews views)  ,跟着它的写法。在onUpdate函数中检测int[] appWidgetids,如果为NULL,就用第2个函数刷新就OK了。。。.这个函数Set the RemoteViews to use for all AppWidget instances for the supplied AppWidget provider。问题暂时得到解决。。

点评

能再解释下么   详情  回复  发表于 2013-3-18 15:47
 
 
   

该用户从未签到

0

主题

6

帖子

8

e币
12
  发表于 2009-6-29 22:04:59  |  只看该作者
新手上路,看到大家的贴,受益颇多
 
 
   

该用户从未签到

17

主题

83

帖子

124

e币
13
  发表于 2009-7-18 22:15:32  |  只看该作者
受益颇多
 
 
   
头像被屏蔽

该用户从未签到

48

主题

379

帖子

277

e币
14
  发表于 2010-7-29 16:01:44  |  只看该作者
提示:  作者被禁止或删除 内容自动屏蔽
 
 
   

该用户从未签到

23

主题

203

帖子

316

e币
15
  发表于 2010-11-25 14:16:26  |  只看该作者
自动横竖屏~高级技术
 
 
   
1 2 下一页
返回列表 发新帖
 
您需要登录后才可以回帖  登录 |  加入eoe 

本版积分规则

*滑动验证:
按住左边滑块,拖动完成上方拼图
 

推荐阅读

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210 )   

GMT+8, 2017-6-6 06:03 , Processed in 1.405970 second(s), 25 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

关闭

扫一扫 关注eoe官方微信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值