HardBirch

Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签

时间:10-12-06 栏目:安卓入门与提高 作者:张飞不张,文采横飞 评论:170 点击: 462,165 次

      很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost TabActivity的组合,其实最常用的不是它们,而是由GridViewActivityGroup的组合。每当用户在GridView选中一项,ActivityGroup就把该项对应的ActivityWindow作为View添加到ActivityGroup所指定的容器(LinearLayout)中。

接下来贴出本例运行的效果图

 

ImageAdapter是本实例的关键之一,它继承于BaseAdapter,并加入一些自定义的方法。ImageAdapter的源码如下:

import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
/**
*
* @author GV
*
*/
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private ImageView[] imgItems;
private int selResId;
public ImageAdapter(Context c,int[] picIds,int width,int height,int selResId) {
mContext = c;
this.selResId=selResId;
imgItems=new ImageView[picIds.length];
for(int i=0;i<picIds.length;i++)
{
imgItems[i] = new ImageView(mContext);
imgItems[i].setLayoutParams(new GridView.LayoutParams(width, height));//设置ImageView宽高
imgItems[i].setAdjustViewBounds(false);
//imgItems[i].setScaleType(ImageView.ScaleType.CENTER_CROP);
imgItems[i].setPadding(2, 2, 2, 2);
imgItems[i].setImageResource(picIds[i]);
}
}

public int getCount() {
return imgItems.length;
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

/**
* 设置选中的效果
*/
public void SetFocus(int index)
{
for(int i=0;i<imgItems.length;i++)
{
if(i!=index)
{
imgItems[i].setBackgroundResource(0);//恢复未选中的样式
}
}
imgItems[index].setBackgroundResource(selResId);//设置选中的样式
}

public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView=imgItems[position];
} else {
imageView = (ImageView) convertView;
}
return imageView;
}
}

 SetFocus(int)这个方法是个关键点,即实现选中的效果。例如有ABCD4Item,其中C被选中了,那么除C以外的Item都被设置为未被选中的样式,而C则设置为选中的样式。

 

接下来就开始写主Activity,主Activity包含GridView控件,名为gvTopBar,有2点是需要注意一下的。

  • SetNumColumns():必须要使用setNumColumns来设置列数,因为这个GridView只有一行,即所有的Item都在同一行,Item数量即为列数。
  • setSelector(new ColorDrawable(Color.TRANSPARENT)):把系统默认选中的背景色透明化,因为我们已经在BaseAdapter中加入了SetFocus()来改变选中的样式。 

import android.app.Activity;
import android.app.ActivityGroup;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
/**
*
* @author GV
*
*/
public class ActivityGroupDemo extends ActivityGroup {

private GridView gvTopBar;
private ImageAdapter topImgAdapter;
public LinearLayout container;// 装载sub Activity的容器

/** 顶部按钮图片 **/
int[] topbar_image_array = { R.drawable.topbar_home,
R.drawable.topbar_user, R.drawable.topbar_shoppingcart,
R.drawable.topbar_note };

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gvTopBar = (GridView) this.findViewById(R.id.gvTopBar);
gvTopBar.setNumColumns(topbar_image_array.length);// 设置每行列数
gvTopBar.setSelector(new ColorDrawable(Color.TRANSPARENT));// 选中的时候为透明色
gvTopBar.setGravity(Gravity.CENTER);// 位置居中
gvTopBar.setVerticalSpacing(0);// 垂直间隔
int width = this.getWindowManager().getDefaultDisplay().getWidth()
/ topbar_image_array.length;
topImgAdapter = new ImageAdapter(this, topbar_image_array, width, 48,
R.drawable.topbar_itemselector);
gvTopBar.setAdapter(topImgAdapter);// 设置菜单Adapter
gvTopBar.setOnItemClickListener(new ItemClickEvent());// 项目点击事件
container = (LinearLayout) findViewById(R.id.Container);
SwitchActivity(0);//默认打开第0页
}

class ItemClickEvent implements OnItemClickListener {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
SwitchActivity(arg2);
}
}
/**
* 根据ID打开指定的Activity
* @param id GridView选中项的序号
*/
void SwitchActivity(int id)
{
topImgAdapter.SetFocus(id);//选中项获得高亮
container.removeAllViews();//必须先清除容器中所有的View
Intent intent =null;
if (id == 0 || id == 2) {
intent = new Intent(ActivityGroupDemo.this, ActivityA.class);
} else if (id == 1 || id == 3) {
intent = new Intent(ActivityGroupDemo.this, ActivityB.class);
}
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Activity 转为 View
Window subActivity = getLocalActivityManager().startActivity(
"subActivity", intent);
//容器添加View
container.addView(subActivity.getDecorView(),
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
}

}

主Activity的布局XML文件源码如下:

















Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签:目前有170 条留言

  1. 又是一个大作,收读了,感谢…

    2010-12-06 08:55 [回复]
  2. 0楼
    kf156:

    顶起

    2010-12-06 09:42 [回复]
  3. 0楼
    hmc1985:

    这个控件用得多,顶![e01]

    2010-12-06 09:51 [回复]
  4. 被某人逼着来顶,没办法得讨好他

    2010-12-06 09:54 [回复]
  5. 0楼
    s278777851:

    顶起…

    2010-12-06 09:55 [回复]
  6. 0楼
    sodino:

    回复 Mailbomb:
    gv牛X。

    2010-12-06 13:47 [回复]
  7. 0楼
    hellogv:

    回复 qwe285735942:
    。。。。。。。。。。。。。

    2010-12-06 15:17 [回复]
  8. 0楼
    hellogv:

    回复 hellogv:
    以后沙发留给你。。

    2010-12-06 15:18 [回复]
  9. 0楼
    solomonzy:

    帮顶[e01]

    2010-12-06 15:53 [回复]
  10. 0楼
    hxy2261:

    我也顶。。;

    2010-12-06 16:28 [回复]
  11. [e01] 好,顶

    2010-12-06 18:45 [回复]
  12. 0楼
    netpirate:

    第一个Activity的资源全部被回收了,似乎没有起到Group的作用。[e07]

    2010-12-06 19:25 [回复]
  13. 0楼
    yxfwjtr:

    顶!

    2010-12-06 22:29 [回复]
  14. 0楼
    f120412352:

    确实不错!楼主 Android牛人[e01]

    2010-12-06 22:58 [回复]
  15. 0楼
    sunlucky:

    不错,
    赞赞~

    2010-12-06 23:07 [回复]
  16. 0楼
    emike:

    帮顶[e01]

    2010-12-07 14:21 [回复]
  17. [e01]

    2010-12-07 15:29 [回复]
  18. 回复 netpirate:确实,不过这东西的价值应该在于子选项卡可以用Activety的派生类实现。毕竟Activity和单纯的Layout子容器还是有很多不同的,某些时候方便一些。另外这玩意应该能从用其他包的Activity

    2010-12-08 18:53 [回复]
  19. 0楼
    dckhello:

    [e01]

    2010-12-08 23:12 [回复]
  20. 这东西有利有弊
    用tab host的话,不知道有谁试过两级tab没有?在两级tab那里,dialog.show会崩掉。另外,activity on result无响应。
    用这种方式的话,资源全部回收,感觉就。。好像一个layout,include进不同的其他的layout,然后每次切换。。
    不过,这文章还是很不错的[e01]

    2010-12-09 00:17 [回复]
  21. 0楼
    ht307:

    [e01]

    2010-12-09 18:44 [回复]
  22. 0楼
    pe10999:

    好强大的帖子啊 学习了

    2010-12-09 19:44 [回复]
  23. 0楼
    zhwei318:

    [e01]

    2010-12-10 18:12 [回复]
  24. 谢谢

    2010-12-11 11:49 [回复]
  25. [e03]

    2010-12-11 16:06 [回复]
  26. 0楼
    free555:

    不错,我第一次把public class testActivityGroup extends ActivityGroup {写成了 public class testActivityGroup extends Activity {
    导致 getLocalActivityManager()没有定义

    2010-12-12 11:26 [回复]
  27. 是不错正在为这发愁呢

    2010-12-13 10:39 [回复]
  28. 0楼
    luofan1986:

    很强大[e03]

    2010-12-13 11:59 [回复]
  29. 很强大~

    2010-12-13 16:56 [回复]
  30. 0楼
    maxnee123:

    [e01]

    2010-12-24 17:58 [回复]
  31. 0楼
    reeve520:

    继续跟随LZ的脚步[e03]

    2010-12-31 10:16 [回复]
  32. 0楼
    ding404:

    请问大侠如何返回的时候,响应activity on result

    2011-01-10 15:21 [回复]
  33. [e10]

    2011-01-27 15:34 [回复]
  34. 0楼
    gxsuyong:

    出现界面后,里面的单选,多选 按钮都是灰色的,不能选择,是什么原因?[e07]

    2011-02-23 15:57 [回复]
  35.   为何一运行到Window subActivity=getLocalActivityManager().startActivity(&quot;subActivity&quot;,intent); 就退出了呢?

    2011-03-09 15:04 [回复]
  36. 学习了今天第一次听说ActivityGroup,谢谢作者提供学习资料[e01]

    2011-03-17 09:45 [回复]
  37. 0楼
    Juwend:

    个人认为,可以直接用两个不同的View做为下面Content的内容,在点击图标之后,切换View也可以达到目的,缺点是所有东西是一个Acitvity里的。。。

    2011-03-17 20:02 [回复]
  38. 0楼
    androidwdz:

    [e03]

    2011-03-24 09:21 [回复]
  39. 0楼
    androidwdz:

    [e01]

    2011-03-24 09:21 [回复]
  40. 0楼
    walkingp:

    请问你是什么工具截图的呢?

    2011-03-27 11:05 [回复]
  41. 按照楼主的写法写了之后,发现一运行到Window subActivity=getLocalActivityManager().startActivity(&quot;subActivity&quot;,intent); 就退出了呢?
    我用的是Android2.2版本的。

    2011-03-27 14:29 [回复]
  42. 0楼
    bigboy909:

    [e03] 高手 佩服

    2011-03-30 16:40 [回复]
  43. 0楼
    bigboy909:

    回复 zbheart_95588:subActivity 估计你没在manifest中配置 呵呵

    2011-03-30 16:42 [回复]
  44. 0楼
    mlianghua:

    这个写得不是很好,还是[e01]

    2011-03-31 20:11 [回复]
  45. 0楼
    haodynasty:

    [e03]

    2011-04-10 20:25 [回复]
  46. 你好,我想问一下:
    您把Acitvity转换为View,其中Activity里面是ListView控件,这时不会监听ListView的条目单击事件,要怎么做才能让其监听呢?

    2011-04-15 07:49 [回复]
  47. 0楼
    guaguafly:

    [e01][e01][e01][e01]
    异常有帮助,顶!

    2011-04-20 23:22 [回复]
  48. 0楼
    xiao888lin:

    你好,能不能向你请教一个问题,我把标签放在左侧后,在ImageVew和LinearLayout之间会出现一个与ImageView等宽的黑色区域,我想了很多办法都没能把这个黑色区域去掉。能不能给我一点建议,谢谢了!

    2011-04-26 21:04 [回复]
  49. 0楼
    a948337429:

    topbar_itemselector.xml如何写才能让头上的GridView中的图片在点击之后还是显示原来的那个

    2011-04-27 15:35 [回复]
  50. 人才啊,写的真好。

    2011-05-03 10:19 [回复]
  51. [e01]真的不错。请教一下,能不能在主Activity下,即首个标签选中而且显示所有标签的前提下,然后再有比如说十几个Activity之间切换?期待大牛解答 qq:489415746

    2011-05-06 11:18 [回复]
  52. 0楼
    a948337429:

    回复 a948337429:就是头部的那个高亮处理应该怎么写?

    2011-05-06 13:37 [回复]
  53. 0楼
    hellogv:

    回复 ziyouzhifeng007:
    不太明白你的问题是什么意思?

    2011-05-06 14:24 [回复]
  54. 回复 hellogv:简单的说就是在一个标签体内,切换到其他很多个Activity当中

    2011-05-14 17:46 [回复]
  55. 求楼主把R.drawable.topbar_itemselectorXML 拿出来看看

    2011-05-18 09:59 [回复]
  56. 是否实用于大项目???

    2011-05-23 13:59 [回复]
  57. 0楼
    hellogv:

    回复 ouyangzhihui:
    当然适用

    2011-05-29 13:17 [回复]
  58. 0楼
    xurui9546:

    大神你好,我想问下在subactivity中的menu为什么用不了了,怎么能解决呢?[e01]

    2011-05-29 21:15 [回复]
  59. 0楼
    hellogv:

    回复 xurui9546:
    menu没试过在这种环境下使用,也许只能在ActivityGroup本身使用

    2011-05-29 21:20 [回复]
  60. 0楼
    LEFT900:

    [e01]牛人!

    2011-06-01 08:59 [回复]
  61. 0楼
    sayyanfu:

    hellogv考虑过Tab分页标签出现在界面的下部吗?

    2011-06-01 09:07 [回复]
  62. 0楼
    gdp2852:

    请问楼主怎么样做这个gif的效果图的???

    2011-06-02 17:43 [回复]
  63. 0楼
    evilmars:

    好用,但上下托从tab标签页可以上下滚动就让人很郁闷了,能固定么?

    2011-06-08 10:34 [回复]
  64. 0楼
    cnbyte:

    回复 evilmars:我也发现gridview在显示一行的时候 能上下滚动。。。

    2011-06-16 15:10 [回复]
  65. 顶一个

    2011-06-19 09:41 [回复]
  66. 0楼
    yelvin:

    好文章,但忘了提需要新建ActivityA和ActivityB两个独立的Activity。这个实现和http://developer.android.com/resources/tutorials/views/hello-tabwidget.html相似,用一个独立的Activity填充screen

    2011-06-19 14:46 [回复]
  67. 我在activitygroup的没个分页下调用了其他的activity,这些activity是一个listactivity,但是每次点击分页发现他不会去重新oncreate(),会onresume(),但是适配器在没初始化的时候就能运行了,以至于我想改变下适配器的内容不能成功,求大神回复

    2011-06-21 18:09 [回复]
  68. 0楼
    hellogv:

    回复 qq343931720:
    不用ListActivity就是了,我一直都是普通activity+控件

    2011-06-22 09:18 [回复]
  69. 回复 hellogv:直接用activity在加list控件,每次onresume的时候会重新去匹配适配器吗?

    2011-06-27 10:44 [回复]
  70. 我先去试试,谢谢啊

    2011-06-27 10:45 [回复]
  71. 解决了大部分问题了,还有的就不问你啦,嘿嘿。我是一只菜鸟,我不吃菜虫哦……[e01][e03][e04]

    2011-06-27 11:07 [回复]
  72. 貌似……[e06]自己在研究下了

    2011-06-27 11:21 [回复]
  73. 0楼
    always_wy:

    [reply]sniffer12345[/reply]
    你的dialog的创建需要将Context指定为tab最上层的Activity,使用getParent()

    2011-07-06 16:12 [回复]
  74. 0楼
    wwaa162:

    发现ActivityGroup有个问题——按键监听,如:监听返回按键实现退出,如把监听事件写在主页面(ActivityGroup)内,在子页面中建个EditText,用按键把焦点聚在EditText上,按返回按键无法响应退出事件,请大牛解答,急…….

    2011-07-18 16:39 [回复]
  75. 0楼
    sys11:

    不错,

    2011-08-03 11:00 [回复]
  76. LZ确实android牛人 没的说!!!

    2011-08-03 11:17 [回复]
  77. 0楼
    ureygo:

    好用!

    2011-08-03 17:16 [回复]
  78. 0楼
    ureygo:

    45楼 xiao888lin 的问题我也碰到了,
    一种方法是在主Activity中设置垂直间隔为-1,
    gvTopBar.setVerticalSpacing(-1);// 垂直间隔

    2011-08-03 21:10 [回复]
  79. 很长见识, 之前一直使用TabHost+tabSpec的方式去做..学习了,多谢

    2011-08-11 11:33 [回复]
  80. 扛鼎之作,必须顶。。。

    2011-08-14 11:04 [回复]
  81. 0楼
    Luoke365:

    有個問題,我在子Activity(如ActivityA)裡面使用WebView,發現有個問題:鏈接點擊是沒有高亮、輸入框得到焦點 鍵盤也沒有自動彈出,子Activity單獨放在最上層是可以的,求高手回复。。。。
    不會是WebView的Bug吧?

    2011-08-15 17:02 [回复]
  82. 0楼
    Luoke365:

    [reply]Luoke365[/reply]
    哦,沒事了,該問題已經解決了。

    2011-08-15 17:14 [回复]
  83. 0楼
    up_mango:

    我在一个整体tabhost里面的一个activity适用ActivityGroup,让在这个里面切换activity,不会抱错,直接退出。

    2011-08-16 10:32 [回复]
  84. 0楼
    hellogv:

    [reply]up_mango[/reply]
    不太理解你说的意思,你说的是ActivityGroup嵌套ActivityGroup?

    2011-08-16 12:17 [回复]
  85. 0楼
    zhfally520:

    楼主 LocalActivityManager这个类貌似被废弃了啊

    2011-08-23 09:28 [回复]
  86. 0楼
    titidaxia:

    请教一下楼主,我根据你的这个做了下更改Activity_A中做了一个ViewFlipper和GestureDetector , Activity_B中用了一个ListView, 运行起来后,ViewFlipper不能更换View, ListView的移动速度也变慢了 , 求教下是什么问题?谢谢楼主

    2011-08-26 15:58 [回复]
  87. 0楼
    fenyush:

    Window.getDecorView()获取的view显示在linearLayou中时,顶部会有一条黑线,linearLayou放在背景色是白色或者透明的时候,很明显,有什么样什么好的办法去掉那条黑线啊?

    2011-08-31 10:17 [回复]
  88. 0楼
    taiyuanhy:

    楼主,我用了你的结构之后,Activity中如果有一些耗内存的东西(比如说三维地图),切换时会出现内存溢出,为何。我在跟踪的时候发现打开新Activity的时候旧的Activity虽然不可见,但是未执行onPause()方法,很不解。

    2011-09-04 14:18 [回复]
  89. 0楼
    hellogv:

    [reply]taiyuanhy[/reply]
    1.要removeView
    2.要LocalActivityManager.removeAllActivities();//清除现成的Activity

    2011-09-04 14:36 [回复]
  90. 0楼
    taiyuanhy:

    [reply]hellogv[/reply]
    楼主的例子中貌似没有LocalActivityManager.removeAllActivities();
    我周一去公司试试。

    2011-09-04 15:21 [回复]
  91. 强悍的代码!学习了……受益匪浅

    2011-09-04 21:04 [回复]
  92. 0楼
    xhw79:

    没有itemselector

    2011-09-09 16:26 [回复]
  93. 0楼
    sserf:

    十分感谢!

    2011-09-13 16:57 [回复]
  94. 万人崇拜的楼主,请问在每个标签下面加一行文字怎么加?

    2011-09-14 14:24 [回复]
  95. 楼主大作,解决我的燃眉之急,感激涕零

    2011-09-14 23:57 [回复]
  96. Window subActivity = getLocalActivityManager().startActivity( "subActivity", intent)这句代码。楼主能在解释一下吗,不是很明白,特别是里面的参数,参数的中的“subActivity” 到底是什么地方配置的。超级郁闷。如果能解释麻烦给解释一下

    2011-09-16 15:20 [回复]
  97. 0楼
    hellogv:

    [reply]wuyakenihao[/reply]
    startActivity(id,intent),id是用来管理getLocalActivityManager所存的activity的销毁和构建等功能

    2011-09-17 10:56 [回复]
  98. 万人敬仰的楼主,请问如何给每一个标签底部加一行文字啊?求教了!

    2011-09-23 16:37 [回复]
  99. 0楼
    hellogv:

    [reply]ziyouzhifeng007[/reply]
    重新定义Item的XML

    2011-09-25 17:08 [回复]
  100. 0楼
    Fyan1900:

    楼主,我如果在内容中点击进入下一个ACTIVITY.那么要怎样才能是这个tab样式仍然显示呢?

    2011-09-28 09:26 [回复]
  101. 0楼
    hellogv:

    [reply]Fyan1900[/reply]
    自定义一个Adapter,可以在getView()方面里面改变它的样式

    2011-09-28 09:41 [回复]
  102. 0楼
    Fyan1900:

    [reply]hellogv[/reply]
    不是很明白,楼主能够再指点下吗?楼主好人,谢谢啦…

    2011-09-28 10:13 [回复]
  103. 0楼
    hellogv:

    [reply]Fyan1900[/reply]
    你先多练练BaseAdapter,然后就会都懂了

    2011-09-28 19:00 [回复]
  104. 0楼
    ffly:

    子Activity里有server,为啥启动不了server呢,不包含着ActivityGroup下,单独启动子Activity,server可以启动

    2011-10-08 15:06 [回复]
  105. 0楼
    qianhen136:

    [reply]ffly[/reply]
    你是用子界面的Activity实例来启动的?

    你应该用ActivityGroup 的实例来启动就可以了

    2011-10-09 11:16 [回复]
  106. 0楼
    bxxasn:

    想问下,这个示例效果怎么录制的?

    2011-10-20 18:08 [回复]
  107. 0楼
    bxxasn:

    hellogv 能不能写一个 一个程序多个界面 单个Activity的示例? 谢谢..

    2011-10-20 18:09 [回复]
  108. 0楼
    hellogv:

    [reply]bxxasn[/reply]
    可以用ViewGroup,方法跟本篇文章差不多的,都是View放到一个容器里

    2011-10-20 20:47 [回复]
  109. 博主你好 我想请教下 我用radiogroup做这种效果的 然后里面也加载了不同的activity 但是我在这里面的activity 跳转到radiogroup之外的activity 然后再跳转回 下面的标签栏就不见了 请问有什么好的解决方法

    2011-10-22 21:23 [回复]
  110. 0楼
    shs1989:

    hellogv 你好 为什么我用了这个方法后 activity1 和activity2 内容不显示出来呢。

    2011-10-24 17:41 [回复]
  111. 0楼
    hellogv:

    [reply]liu_jun_y[/reply]
    更高的方法?

    2011-11-01 22:16 [回复]
  112. 厉害

    2011-11-10 10:17 [回复]
  113. lz,我点击其中一个按钮的时候 不会出现图片或者文字。 现在挺急的 能加qq详细的问一问吗 谢谢了 qq 535244793
    如果不能加qq也在线回答下我的问题
    我点击其中任何一个按钮, 都不会出现ActivityA或者b的layout 为什么呢

    2011-11-20 10:02 [回复]
  114. 强, 这个方法好!!

    2011-11-20 13:03 [回复]
  115. 0楼
    hellogv:

    [reply]xiongdandasn[/reply]
    这个要通过adapter来改变item的样式

    2011-11-20 23:38 [回复]
  116. 0楼
    liweituzi:

    我实现后gridview滚动,是怎么回事啊楼主?

    2011-11-21 15:00 [回复]
  117. 0楼
    hellogv:

    [reply]liweituzi[/reply]
    设置大小

    2011-11-21 19:02 [回复]
  118. 0楼
    zjfcslg163:

    为什么我实现的只能实现实现点击按钮就跳转一次,再点击按钮就没用了。。。我是个菜鸟

    2011-11-23 09:55 [回复]
  119. 0楼
    ying_jia:

    感谢楼主。你写的非常好.让我相当的佩服啊。小弟一直在研究你写的代码。

    2011-11-24 18:19 [回复]
  120. 0楼
    hellogv:

    [reply]ying_jia[/reply]
    有空多来踩踩,快到100W访问量了

    2011-11-24 23:36 [回复]
  121. 0楼
    read_act:

    请问楼主, 再点击第2+ 个GridView 的Item 时, 前面加载进来的View是被如何处理的?
    还有, 为什么这么做效率会比使用TabView 高?

    谢谢!

    2011-11-28 17:20 [回复]
  122. 0楼
    hellogv:

    [reply]read_act[/reply]
    建个工程跑跑就会明白了

    2011-11-28 22:54 [回复]
  123. 0楼
    fjzzy5566:

    楼主,你好,我想问下,我如何实现用一个tab中的按键点击后可以跳到另一个tab,相应的tab标签选项也变成另一个tab的,如我第三个tab中有个按键,我一点击回到tab2的界面中,谢谢

    2011-12-06 22:43 [回复]
  124. 0楼
    hellogv:

    [reply]fjzzy5566[/reply]
    tab也是view,你用view切换就行了,view切换的方法有很多种的

    2011-12-07 23:48 [回复]
  125. 0楼
    hellogv:

    [reply]sayyanfu[/reply]
    把布局做到下面就OK了

    2011-12-15 22:26 [回复]
  126. 0楼
    read_act:

    貌似是把activity变成一个View加入容器然后显示,
    这么做的话被放入的activity的部分生命周期方法会失效,比如一个被放入的Activity A有个ListView,点了其中一个item 后启动一个新Activity B, 当B finish()后再回到A时,onActivityResult()并不会执行,那我如果想回到A时更新它里面的ListView该怎么搞呢,求指教

    2011-12-16 11:05 [回复]
  127. 0楼
    hellogv:

    [reply]read_act[/reply]
    ActivityManager允许你用堆栈的方式启动和恢复Activitiy,View只是表现形式而已

    2011-12-17 10:55 [回复]
  128. 0楼
    showex:

    [reply]hellogv[/reply]看了你的文章很受启发,我也碰到上面这位兄弟类似的问题,请问一下能不能详细说一下如何恢复activity的状态呢?

    2012-01-04 16:27 [回复]
  129. 0楼
    hellogv:

    [reply]showex[/reply]
    activity manager,看看这个类有什么方法就一目了然了

    2012-01-05 22:32 [回复]
  130. 0楼
    nobaddd:

    [reply]bigboy909[/reply]
    能详细说说吗?我刚学android,遇到这个问题,不懂解决,谢谢

    2012-01-11 17:11 [回复]
  131. 0楼
    ying_jia:

    楼主:如果你有时间的话就回复我一下,我提前说谢谢了。
    我用的就是你这个方法,也许我对activitygroup不太熟悉,
    现在我遇到的问题是我分了四个activity,点击进去某一个activity中,我无法进行菜单menu操作,我查了查,因为我们点击进去的activity是包含在外面的activity中。也就是我们看到的是一个主activity层,里面包含了四个activity视图,你说我说的对吗?所以我想要实现就必须在最外层activity中实现,可是这样做外面的所有Activity都会实现菜单操作,也许我们通过gridview的id获取能够解决,但是有一点我想了好久,就是我点击进去一个activity,点击弹出菜单后屏幕上面一切都不准点击了。这个效果肯定不是我想要的,所以想请我的偶像你帮帮小弟。再次谢谢了(对了我用的是gridview +popupWindow实现自定义菜单,系统菜单也行,我真的不知道怎么解决该问题。)

    2012-01-11 22:54 [回复]
  132. 0楼
    hellogv:

    [reply]ying_jia[/reply]
    menu是针对activitygroup的,里面的子activity没有menu,所以,如果要使用menu的话,那就判断当前的子activity是哪个而弹出对应的menu,说白了,就是有多少个子activity就做几个menu

    2012-01-12 09:16 [回复]
  133. 用自带的TabHost完全可以实现这个ui,能问下 为什么要自定义一个啊?这样做有什么其他的用途吗?

    2012-01-16 11:24 [回复]
  134. 0楼
    hellogv:

    [reply]jishg318974[/reply]
    很多标准的android组件,在实际开发的过程中都需要重新定制UI和加入其他方法

    2012-01-16 13:02 [回复]
  135. 0楼
    inurbane:

    你好,我想问你一个问题,Gridview默认情况下,我们按上下 左右方向键是可以控制焦点先中的对吧,如果 我加了上下左右方向键事件之后(上下方向键没做任何处理),为什么光标上下左右不起作用?还有,怎么设置Gridview的items默认选中?

    2012-01-16 14:19 [回复]
  136. 0楼
    hellogv:

    [reply]inurbane[/reply]
    第1个问题,你捕获上下左右键之后,有没有把这些消息送回gridview,还是拦截了而不返回?
    第2个问题:我一般喜欢继承BaseAdapter,在里面加入个方法设置选中态

    2012-01-16 14:39 [回复]
  137. 0楼
    inurbane:

    [reply]hellogv[/reply]
    那,我用onkeyDown来控制方向键事件,是不是我加入键事件之后一定要写this.setFocusable(true);,事件才会监听?

    2012-01-16 14:51 [回复]
  138. 0楼
    inurbane:

    还有,我想问一个用BaseAdapter怎么来控制设置选 中Gridview的item呢?

    2012-01-16 14:53 [回复]
  139. 0楼
    hellogv:

    [reply]inurbane[/reply]
    本文的public void SetFocus(int index) 就是一个设置选中态效果的自定义方法

    2012-01-16 21:31 [回复]
  140. 0楼
    werfgweer:

    这位大哥,我用TabHost实现的标签页,但是老是出现黑屏,就是activity之间切换,会出现视图加载不出来的情况,但是关闭屏幕再打开屏幕,就会加载出来,请问这是什么情况,困扰我很久了。

    2012-02-20 11:21 [回复]
  141. 0楼
    macjie:

    您好:麻烦问下 因为我设计上的问题 我的gridview需要放在底部
    ,原先我是直接在LinearLayout上设置android:layout_marginBottom="40dip"
    GridView设置
    android:layout_alignParentBottom="true"
    再设置用相对布局
    可是我的每个子Activity显示的时候都会缺少40dip.这样可能我的子页面的布局就全部乱了
    有没什么比较好的办法解决这问题
    我试过GridView和LinearLayout的换个位置结果报错
    ClassCastException: android.widget.LinearLayout

    2012-02-21 11:05 [回复]
  142. 学习了 正是我需要的

    2012-02-22 16:44 [回复]
  143. 0楼
    chonbj:

    Window subActivity = getLocalActivityManager()().startActivity(
    "subActivity", intent);

    getLocalActivityManager()这个怎么报错啊

    2012-02-27 12:06 [回复]
  144. 0楼
    cj870923:

    我实现时,有的Activity带按钮,就会出错,求解决方法

    2012-03-14 09:03 [回复]
  145. 有bug楼主不解决呀,back键事件直接退出

    2012-03-21 22:29 [回复]
  146. 0楼
    hellogv:

    [reply]chonbj[/reply]
    必须是ActivityGroup才有的方法,一般Activity没有的

    2012-03-22 09:06 [回复]
  147. 0楼
    a383028663:

    你可以在ActivityGroup里手动捕获Back键事件

    2012-03-23 16:30 [回复]
  148. [reply]cj870923[/reply]
    Button标签加一句:android:focusable="false"
    就可以了。

    2012-03-26 16:56 [回复]
  149. 0楼
    feijimmy:

    R.drawable.topbar_itemselector
    求topbar_itemselector.xml文件

    2012-03-27 14:35 [回复]
  150. 0楼
    tesky0125:

    昨天抢着看了下,稍微有些不理解,后来发现那个改变背景的方式,不是改变GridView的背景,而是改变了其中ImageView的背景,也就是不是通过selector来实现的。
    所以上面的大伙不再需要那个所谓的selector.xml文件了,因为根本没有,而是资源名误导了你们。

    2012-03-28 20:44 [回复]
  151. 0楼
    fly_hust:

    楼主确实强大 小弟这有个问题 我从另外一个Activity中启动ActivityGroup时,AcrivityGroup会连续启动两次,一直没找出是什么原因 望楼主解答

    2012-04-03 07:58 [回复]
  152. 0楼
    hellogv:

    [reply]fly_hust[/reply]
    这个Activity是ActivityGroup内部,还是跟ActivityGroup同层次的?

    2012-04-03 11:03 [回复]
  153. 0楼
    fly_hust:

    是同层的,软件启动后的第一个Activity,通过一个按钮启动ActivityGroup 我找了半天也找不到原因
    楼主回复的挺快的 谢谢你啦[reply]hellogv[/reply]

    2012-04-03 14:21 [回复]
  154. 0楼
    hellogv:

    [reply]fly_hust[/reply]
    你看看是ActivityGroup启动两次,还是子Activity被启动了2次

    2012-04-05 14:22 [回复]
  155. 0楼
    fly_hust:

    问题已经解决了 都怪我粗心 楼主确实大牛 崇拜啊

    2012-04-07 17:05 [回复]
  156. 求代码

    2012-04-11 10:05 [回复]
  157. 0楼
    zwcan241:

    每次点击个tab内容都会重载,这样效率会高吗?

    2012-04-18 11:41 [回复]
  158. 0楼
    geniuz:

    請教一個問題,為何子activity上的操作非常慢?
    具體情況是這樣的:
      我並沒有用gridview做,也沒有做adapter,僅是放一些imageview在左側作為tab按鈕。而主頁面右邊主要部份,則作為顯示區域,我只是參考了你SwitchActivity()函數內的處理手法。
      而子activity內有seekbar等控件。如果我直接startActivity去啟動子activity,拉動seekbar等操作是很順的。可一旦用了ActivityGroup去把子activity轉成view嵌入,在子activity上的操作就很慢,響應很慢。例如拉動seekbar,非常卡,好像拉不動的樣子。在2.1和2.2的模擬器上都是這樣。
      請問這會是什麼原因呢?
      如果TabActivity也是繼承ActivityGroup,為何TabActivity並不會出現這種情況?是否有什麼優化方法能改善?
    謝謝!

    2012-04-19 21:48 [回复]
  159. 0楼
    geniuz:

    請教一個問題,為何子activity上的操作非常慢?
    具體情況是這樣的:
      我並沒有用gridview做,也沒有做adapter,僅是放一些imageview在左側作為tab按鈕。而主頁面右邊主要部份,則作為顯示區域,我只是參考了你SwitchActivity()函數內的處理手法。
      而子activity內有seekbar等控件。如果我直接startActivity去啟動子activity,拉動seekbar等操作是很順的。可一旦用了ActivityGroup去把子activity轉成view嵌入,在子activity上的操作就很慢,響應很慢。例如拉動seekbar,非常卡,好像拉不動的樣子。在2.1和2.2的模擬器上都是這樣。
      請問這會是什麼原因呢?
      如果TabActivity也是繼承ActivityGroup,為何TabActivity並不會出現這種情況?是否有什麼優化方法能改善?
    急啊~謝謝!

    2012-04-19 21:49 [回复]
  160. 0楼
    xinwuguaai:

    intent = new Intent(ActivityGroupDemo.this, ActivityA.class);
    LZ,请教下,每次都是重新 new一个实例,这样子的话,原来view里面的数据都没有了。这样貌似不太好。如果想保留数据,有什么方法实现呢?

    2012-05-02 22:03 [回复]
  161. 0楼
    zhy0220:

    请教下楼主,要把tab放在底部怎么实现啊?谢谢!

    2012-05-03 14:50 [回复]
  162. 0楼
    sammy4231:

    [reply]macjie[/reply]
    遇到了同样的问题

    2012-05-10 16:11 [回复]
  163. 0楼
    hellogv:

    [reply]zhy0220[/reply]
    整个布局都是LinearLayout

    2012-05-12 10:33 [回复]
  164. 0楼
    siwen312:

    不能进行横竖屏切换,用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);不行。在manifest中设置也不行。

    2012-05-16 14:47 [回复]
  165. 问一下:读取SD卡中的图片后,在主页面点击在线电影之后进入该页面,显示该相关图片信息,然后再点击返回主页按钮,再次进入 在线电影页面 为什么上一次的记录会显示出来,本次进入时 又会再加载一次。。。每次都会循环加载,上次加载的怎么清空啊?

    2012-05-31 11:45 [回复]
  166. 那我如果在第一个页面内加入一个按钮跳转到其他Activity中(这个Activity不具有菜单项),怎么样再跳转回原先那个带有菜单项的页面,同时会刷新?

    2012-07-07 11:30 [回复]
  167. 0楼
    ylq_kk:

    我也遇到这个问题了,楼主给解决一下了吧,先谢谢了!!![reply]zhang_Sentire[/reply]

    2012-07-24 15:39 [回复]
  168. 只是提供思路,,,剩下还是要靠自己,何必问呢

    2012-07-31 15:13 [回复]
  169. 国威老师,很想请教一下您,博文中的动态图片是怎么做的,谢谢

    2012-09-07 20:20 [回复]
  170. 0楼
    ty1234u:

    [reply]xinwuguaai[/reply]
    跳转前将原来的View保留就可以了吧

    2012-10-10 12:44 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐