TabHost+expandablelistview

2.png

1 小时前 上传
下载附件 (90.07 KB)

1通过布局显示内容:

Xml

<?xml version="1.0"encoding="utf-8"?>

<TabHostxmlns:android="http://schemas.android.com/apk/res/android"

   android:id="@+id/tabHost"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   >

   <LinearLayout

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       androidrientation="vertical">

      

       <TabWidget

           android:id="@android:id/tabs"  android提供的规范必须有,相当于标识位

           android:layout_width="fill_parent"

           android:layout_height="wrap_content"/>

        

       <FrameLayout

           android:id="@android:id/tabcontent"   android提供的规范

           android:layout_width="fill_parent"

           android:layout_height="fill_parent">

           

           <LinearLayout

                android:id="@+id/line1"

               android:layout_width="fill_parent"

               android:layout_height="fill_parent">

               

                <TextView

                   android:layout_width="fill_parent"

                    android:layout_height="wrap_content"

                    android:text="one"/>

           </LinearLayout>

           <LinearLayout

               android:id="@+id/line2"

               android:layout_width="fill_parent"

               android:layout_height="fill_parent">

               

                <TextView

                   android:layout_width="fill_parent"

                   android:layout_height="wrap_content"

                    android:text="two"/>

           </LinearLayout>

           <LinearLayout

                android:id="@+id/line3"

               android:layout_width="fill_parent"

               android:layout_height="fill_parent">

               

                <TextView

                   android:layout_width="fill_parent"

                    android:layout_height="wrap_content"

                    android:text="three"/>

           </LinearLayout>

           

       </FrameLayout>

   </LinearLayout>

</TabHost>

Acivity

public class MainActivity extends Activity{

      

   private TabHost mTabHost;

       /**Called when the activity is first created. */

   @Override

   public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

      

       mTabHost = (TabHost) findViewById(R.id.tabHost);

       //初始化信息

       mTabHost.setup();

      

       //创建选项卡

       TabSpec tab1 = mTabHost.newTabSpec("tab1");

       //头信息

       tab1.setIndicator("首页", getResources().getDrawable(R.drawable.i1));

       //内容

       tab1.setContent(R.id.line1);

       mTabHost.addTab(tab1);

      

       //创建选项卡

       TabSpec tab2 = mTabHost.newTabSpec("tab2");

       //头信息

       tab2.setIndicator("第二页", getResources().getDrawable(R.drawable.i2));

       //内容

       tab2.setContent(R.id.line2);

       mTabHost.addTab(tab2);

      

       //创建选项卡

       TabSpec tab3 = mTabHost.newTabSpec("tab3");

       //头信息

       tab3.setIndicator("第三页", getResources().getDrawable(R.drawable.i3));

       //内容

       tab3.setContent(R.id.line3);

       mTabHost.addTab(tab3);

    }

}

通过Acivity显示内容

这样便于维护,适于做逻辑复杂的处理。

Xml

<?xml version="1.0"encoding="utf-8"?>

<TabHostxmlns:android="http://schemas.android.com/apk/res/android"

   android:id="@+id/tabHost"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   >

   <LinearLayout

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       androidrientation="vertical">

      

       <TabWidget

           android:id="@android:id/tabs"

           android:layout_width="fill_parent"

           android:layout_height="wrap_content"/>

      

       <FrameLayout

           android:id="@android:id/tabcontent"

           android:layout_width="fill_parent"

           android:layout_height="fill_parent"/>

   </LinearLayout>

</TabHost>

acivity

//ActivityGroup 能过管理多个Activity

public class MainActivity2 extends ActivityGroup {

      

   private TabHost mTabHost;

       /**Called when the activity is first created. */

   @Override

    public void onCreate(BundlesavedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main2);

      

       mTabHost = (TabHost) findViewById(R.id.tabHost);

       //初始化信息

       mTabHost.setup(getLocalActivityManager());

      

       //创建选项卡

       TabSpec tab1 = mTabHost.newTabSpec("tab1");

       //头信息

       tab1.setIndicator("首页", getResources().getDrawable(R.drawable.i1));

       //内容

       tab1.setContent(newIntent(this,Activity1.class));    要求参数:Intent

       mTabHost.addTab(tab1);

      

       //创建选项卡

       TabSpec tab2 = mTabHost.newTabSpec("tab2");

       //头信息

       tab2.setIndicator("第二页", getResources().getDrawable(R.drawable.i2));

       //内容

       tab2.setContent(new Intent(this,Activity2.class));

       mTabHost.addTab(tab2);

      

       //创建选项卡

       TabSpec tab3 = mTabHost.newTabSpec("tab3");

       //头信息

       tab3.setIndicator("第三页", getResources().getDrawable(R.drawable.i3));

       //内容

       tab3.setContent(new Intent(this,Activity3.class));

       mTabHost.addTab(tab3);

    }

}

自定义头部信息

头部xml

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   androidrientation="vertical"

   android:background="@drawable/bg">

   <TextView

       android:id="@+id/tv_info"

       android:layout_width="fill_parent"

       android:layout_height="fill_parent"

       android:gravity="center"

       android:textColor="@android:color/white"

       android:textSize="22sp"/>

</LinearLayout>

颜色选择器xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true"android:drawable="@drawable/bg_selected"/>

    <item android:drawable="@drawable/bg_normal"></item>

</selector>

Acivity

tab3.setIndicator(createView("第一页")); 要求参数:view

public View createView(Stringtext){

        LayoutInflatermInflater = getLayoutInflater();

        Viewview = mInflater.inflate(R.layout.headernull);

    TextView tv_info = (TextView)view.findViewById(R.id.tv_info);

        tv_info.setText(text);

        return view;

    }

不需要布局文件

public class MyTabHostActivity extends TabActivity {

      

       @Override

       protectedvoid onCreate(Bundle savedInstanceState) {

              // TODO Auto-generated method stub

              super.onCreate(savedInstanceState);

              不需要布局文件 只可以管理acitity内容

              TabHost tabHost = getTabHost();  

              

       }

}

Expandablelistview

Xml:

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

   androidrientation="vertical" >

   <ExpandableListView

       android:id="@+id/elv"

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

        />

</LinearLayout>

Activity

public class MainActivity extends Activity{

   /** Called when the activity is first created. */

   @Override

   public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

      

       ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv);

      

       File file = new File(getFilesDir(),"commonnum.db");

       ///data/data/包名/files

       if(!file.exists()){

        try {

                            //复制数据库

                            InputStreamis = getResources().getAssets().open("commonnum.db");

               得到数据用流写入///data/data/包名/files便于读取

                            byte[] buffer = new byte[1024];

                            int len = 0;

                            OutputStream os = newFileOutputStream(file);

                            while((len = is.read(buffer)) != -1){

                                   os.write(buffer,0, len);

                            }

                            is.close();

                            os.close();

                     }catch (Exception e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                     }

       }

      

      

List<Map<String,Object>> groupData= DataService.getGroupData(file.getAbsolutePath());

      

finalList<List<Map<String,Object>>> childData =DataService.getChildData(file.getAbsolutePath());

      

       SimpleExpandableListAdapter adapter = newSimpleExpandableListAdapter(

                this, 上下文

                groupData, 父级数据

                android.R.layout.simple_expandable_list_item_1,父级布局

                new String[]{"name"},  父级属性

                newint[]{android.R.id.text1}, 父级控件

                childData, 子级数据

                android.R.layout.simple_expandable_list_item_2,子级布局

                newString[]{"name","number"}, 子级属性

                newint[]{android.R.id.text1,android.R.id.text2}); 父级控件

        

        elv.setAdapter(adapter);

        

      

       elv.setOnChildClickListener(newExpandableListView.OnChildClickListener() {

                     

                     @Override

                     publicboolean onChildClick(ExpandableListView parent, View v,

                                   intgroupPosition, int childPosition, long id) {

                            // TODO Auto-generated method stub

                           

                            //拿到电话号码

                            String number =(String)childData.get(groupPosition).get(childPosition).get("number");

                           

                            //复制号码到拨号盘

                            Intent intent = new Intent();

                            intent.setAction(Intent.ACTION_DIAL);

                            intent.setData(Uri.parse("tel:"+number));

                            startActivity(intent);

                            return false;

                     }

              });

    }

}

DataService

public class DataService {

       /**

        * 得到组数据

        * @return

        */

       publicstatic List<Map<String,Object>> getGroupData(String path){

              

              List<Map<String,Object>> list= new ArrayList<Map<String,Object>>();

打开数据库

              SQLiteDatabase db=SQLiteDatabase.openDatabase(path,null, SQLiteDatabase.OPEN_READONLY);

              if(db.isOpen()){

                     Cursorc = db.query("classlist",

                                   newString[]{"idx","name"},

                                   null,null, null, null, null);

                     while(c.moveToNext()){

                            Map<String,Object> map = newHashMap<String, Object>();

                            map.put("idx",c.getString(c.getColumnIndex("idx")));

                            map.put("name",c.getString(c.getColumnIndex("name")));

                            list.add(map);

                     }

                     c.close();

                     db.close();

              }

              return list;

       }

      

      

       /**

        *得到子数据

        * @param path

        * @return

        */

       publicstatic List<List<Map<String,Object>>> getChildData(Stringpath){

              

              List<List<Map<String,Object>>>childData = new ArrayList<List<Map<String,Object>>>();

              

              SQLiteDatabase db =SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);

              if(db.isOpen()){

                     

                     //父数据的大小 根据父数据查询子节点数据

                     List<Map<String,Object>>groupData = getGroupData(path);

                     intsize = groupData.size();

                     for(inti = 0;i < size;i++){

                            List<Map<String,Object>> list= new ArrayList<Map<String,Object>>();

                            Cursor c =db.query("table"+groupData.get(i).get("idx"),

                                          newString[]{"name","number"},

                                          null,

                                          null, null, null, null);

                            while(c.moveToNext()){

                                   Map<String,Object>map = new HashMap<String, Object>();

                                   map.put("name",c.getString(c.getColumnIndex("name")));

                                   map.put("number",c.getString(c.getColumnIndex("number")));

                                   list.add(map);

                            }

                            c.close();

                           

                            childData.add(list);

                     }

                     db.close();

              }

              

              return childData;

       }

}

课后问题

TabHost使用在什么情况?  

一个界面显示种不类型的内容时使用。

实现TabHost的两种方式

一种是自己写布局,一种是直接继承TabAcitity 得到 TabHost对象

ExpandabledListView

树形菜单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值