tab界面实现方式之Fragment

相信大家都用过qq,关于qq的界面是怎么实现的呢?其实它的界面就是我们今天要说的--用Fragment来实现tab。

首先,我们来说说这个方式的优点:

1.减少MainActivity类中的代码,将代码分配给相应的Fragment类中

2.由于创建了多个Fragment来管理布局,因此后期维护更加容易,只需要更改相应的Fragment就行

3.在单个Fragment中可以实现更多的功能,想一想qq的向右滑动与向左滑动。如果是viewpager,则不能这些功能。

好,话不多说,直接贴代码

MainActivity布局文件

xml代码

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context="com.example.android_tab1.MainActivity" >
 7
 8     <LinearLayout
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content" >
11
12         <include layout="@layout/top" />
13     </LinearLayout>
14     <FrameLayout
15         android:id="@+id/framelayout"
16         android:layout_width="match_parent"
17         android:layout_height="0dp"
18         android:layout_weight="1"
19         ></FrameLayout>
20     <LinearLayout
21         android:layout_width="match_parent"
22         android:layout_height="wrap_content" >
23
24         <include layout="@layout/bottom" />
25     </LinearLayout>
26
27 </LinearLayout>

其他的xml代码,比如top.xml,  buttom.xml,  view1.xml,  view2.xml,  view3.xml,  view4.xml代码都与上一文章中的一样的,这里我就不贴了

WeixinFragment代码

JAVA代码

 1 package com.example.Fragment;
 2
 3
 4 import com.example.android_tab2.R;
 5
 6 import android.os.Bundle;
 7 import android.support.v4.app.Fragment;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.ViewGroup;
11
12 public class WeixinFragment extends Fragment{
13     @Override
14     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
15         // TODO Auto-generated method stub
16         return inflater.inflate(R.layout.view1, container, false);
17     }
18 }

FriendFragment代码

JAVA代码

 1 package com.example.Fragment;
 2
 3
 4 import com.example.android_tab2.R;
 5
 6 import android.os.Bundle;
 7 import android.support.v4.app.Fragment;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.ViewGroup;
11
12 public class FriendFragment extends Fragment{
13     @Override
14     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
15         // TODO Auto-generated method stub
16         return inflater.inflate(R.layout.view2, container, false);
17     }
18 }

AddressFragment代码

JAVA代码

 1 package com.example.Fragment;
 2
 3
 4 import com.example.android_tab2.R;
 5
 6 import android.os.Bundle;
 7 import android.support.v4.app.Fragment;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.ViewGroup;
11
12 public class AddressFragment extends Fragment{
13     @Override
14     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
15         // TODO Auto-generated method stub
16         return inflater.inflate(R.layout.view3, container, false);
17     }
18 }

SettingFragment代码

JAVA代码

 1 package com.example.Fragment;
 2
 3
 4 import com.example.android_tab2.R;
 5
 6 import android.os.Bundle;
 7 import android.support.v4.app.Fragment;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.ViewGroup;
11
12 public class SettingFragment extends Fragment{
13     @Override
14     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
15         // TODO Auto-generated method stub
16         return inflater.inflate(R.layout.view4, container, false);
17     }
18 }

MainActivity代码

JAVA代码

  1 package com.example.android_tab2;
  2
  3 import com.example.Fragment.AddressFragment;
  4 import com.example.Fragment.FriendFragment;
  5 import com.example.Fragment.SettingFragment;
  6 import com.example.Fragment.WeixinFragment;
  7
  8 import android.os.Bundle;
  9 import android.support.v4.app.Fragment;
 10 import android.support.v4.app.FragmentActivity;
 11 import android.support.v4.app.FragmentManager;
 12 import android.support.v4.app.FragmentTransaction;
 13 import android.util.Log;
 14 import android.view.View;
 15 import android.view.View.OnClickListener;
 16 import android.view.Window;
 17 import android.widget.ImageButton;
 18 import android.widget.LinearLayout;
 19
 20 public class MainActivity extends FragmentActivity implements OnClickListener{
 21     private LinearLayout linear_weixin = null;
 22     private LinearLayout linear_friend = null;
 23     private LinearLayout linear_address = null;
 24     private LinearLayout linear_setting = null;
 25
 26     private ImageButton imagebutton_weixin = null;
 27     private ImageButton imagebutton_friend = null;
 28     private ImageButton imagebutton_address = null;
 29     private ImageButton imagebutton_setting = null;
 30
 31     private Fragment weixinFragment = null;
 32     private Fragment friendFragment = null;
 33     private Fragment addressFragment = null;
 34     private Fragment settingFragment = null;
 35     protected void onCreate(Bundle savedInstanceState) {
 36         super.onCreate(savedInstanceState);
 37         requestWindowFeature(Window.FEATURE_NO_TITLE);
 38         setContentView(R.layout.activity_main);
 39         initview();
 40         initEvents();
 41         change(0);
 42     }
 43
 44     private void initview() {
 45         linear_weixin = (LinearLayout) findViewById(R.id.linear_weixin);
 46         linear_friend = (LinearLayout) findViewById(R.id.linear_friend);
 47         linear_address = (LinearLayout) findViewById(R.id.linear_address);
 48         linear_setting = (LinearLayout) findViewById(R.id.linear_setting);
 49
 50
 51         imagebutton_weixin = (ImageButton) findViewById(R.id.imagebutton_weixin);
 52         imagebutton_friend = (ImageButton) findViewById(R.id.imagebutton_friend);
 53         imagebutton_address = (ImageButton) findViewById(R.id.imagebutton_address);
 54         imagebutton_setting = (ImageButton) findViewById(R.id.imagebutton_setting);
 55
 56     }
 57     private void initEvents() {
 58         linear_weixin.setOnClickListener(this);
 59         linear_friend.setOnClickListener(this);
 60         linear_address.setOnClickListener(this);
 61         linear_setting.setOnClickListener(this);
 62     }
 63
 64
 65     public void onClick(View v) {
 66         resetImage();
 67         switch(v.getId())
 68         {
 69             case R.id.linear_weixin:
 70             {
 71                 change(0);
 72                 break;
 73             }
 74             case R.id.linear_friend:
 75             {
 76                 change(1);
 77                 break;
 78             }
 79             case R.id.linear_address:
 80             {
 81                 change(2);
 82                 break;
 83             }
 84             case R.id.linear_setting:
 85             {
 86                 change(3);
 87                 break;
 88             }
 89         }
 90     }
 91     private void change(int i)
 92     {
 93         //获得Fragment的管理员
 94         FragmentManager manager = getSupportFragmentManager();
 95         FragmentTransaction transaction = manager.beginTransaction();
 96         //将所有的Fragment隐藏起来
 97         hideFragment(transaction);
 98         switch(i)
 99         {
100             case 0:
101             {
102                 imagebutton_weixin.setImageResource(R.drawable.tab_weixin_pressed);
103                 if(weixinFragment == null)
104                 {
105                     weixinFragment = new WeixinFragment();
106                     transaction.add(R.id.framelayout, weixinFragment);
107                 }
108                 else
109                 {
110                     Log.i("main", "1");
111                     transaction.show(weixinFragment);
112                 }
113
114                 break;
115             }
116             case 1:
117             {
118                 imagebutton_friend.setImageResource(R.drawable.tab_find_frd_pressed);
119                 if(friendFragment == null)
120                 {
121                     friendFragment = new FriendFragment();
122                     transaction.add(R.id.framelayout, friendFragment);
123                 }
124                 else
125                 {
126                     Log.i("main", "2");
127                     //显示特定Fragment
128                     transaction.show(friendFragment);
129                 }
130
131                 break;
132             }
133             case 2:
134             {
135                 imagebutton_address.setImageResource(R.drawable.tab_address_pressed);
136                 if(addressFragment == null)
137                 {
138                     addressFragment = new AddressFragment();
139                     transaction.add(R.id.framelayout, addressFragment);
140                 }
141                 else
142                 {
143                     Log.i("main", "3");
144                     transaction.show(addressFragment);
145                 }
146
147                 break;
148             }
149             case 3:
150             {
151                 imagebutton_setting.setImageResource(R.drawable.tab_settings_pressed);
152                 if(settingFragment == null)
153                 {
154                     settingFragment = new SettingFragment();
155                     transaction.add(R.id.framelayout, settingFragment);
156                 }
157                 else
158                 {
159                     Log.i("main", "4");
160                     transaction.show(settingFragment);
161                 }
162
163                 break;
164             }
165         }
166         transaction.commit();
167     }
168     private void hideFragment(FragmentTransaction transaction)
169     {
170         if(weixinFragment != null)
171         {
172             //隐藏特定的Fragment
173             transaction.hide(weixinFragment);
174         }
175         if(friendFragment != null)
176         {
177             transaction.hide(friendFragment);
178         }
179         if(addressFragment != null)
180         {
181             transaction.hide(addressFragment);
182         }
183         if(settingFragment != null)
184         {
185             transaction.hide(settingFragment);
186         }
187     }
188     private void resetImage()
189     {
190         imagebutton_weixin.setImageResource(R.drawable.tab_weixin_normal);
191         imagebutton_friend.setImageResource(R.drawable.tab_find_frd_normal);
192         imagebutton_address.setImageResource(R.drawable.tab_address_normal);
193         imagebutton_setting.setImageResource(R.drawable.tab_settings_normal);
194     }
195 }
时间: 2025-01-02 09:09:13

tab界面实现方式之Fragment的相关文章

tab界面实现方式之viewpager+view

这里,我将说下使用viewpager加上view来实现tab界面.其实这个并不陌生,这个就是我们在学习最初的viewpager的时候,viewpager的使用方式. 基本思想就是:将多个xml布局文件转换为view对象,再加到Adapter上去. 其中实现xml文件往view对象的转换的两种方式: 1.LayoutInflate Lf = getLayoutInflate.from(this) View view = Lf.inflate(resource, root) 2.View view

tab界面实现方式之ViewPager+TabPageIndicator

今天我来说说ViewPager+tabPageIndicator来实现tab界面.首先tabPageIndicator是在第三方的library包里面-- viewPagerlibrary,在githup上可以下载,我们需要将它导入eclipse中,然后在关联它.当我们使用这个包的时候,有一个问题需要注意:可能主工程中会报错,但是我们又不知道是哪里错了,最好看看libs下的v4包,一定要保证主工程和library中的v4包要么一模一样,要么只有一个,所以要么将其中一个v4包用另一个v4覆盖,或者

tab界面实现方式之ViewPager+FragmentPager

这次的实现的目的其实跟viewpager+view实现的功能一样的,唯一不同的是:这里的viewpager加载的是Fragment. 其中xml代码与之前的完全一样,所以这里就不贴了.这里我只贴下MainActivity的代码 MainActivity代码 java代码 1 package com.example.android_tab3; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.exampl

【Android界面实现】使用ActionBar和DrawerLayout纯原生控件,实现侧滑栏和滑动Tab界面

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的文章中,我们使用第三方开源控件,比如说是SlidingMenu和PagerSlidingTabStrip,实现过侧滑栏和滑动Tab界面.但是在support-v4包中,提供了原生的侧滑栏控件DrawerLayout,而滑动的Tab效果,我们可以使用ViewPager和ActionBar上的Tab来进行实现.所以在今天的文章里面,我们将介绍如何将DrawerLayout与ActionBar进行整合,

网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)

一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持. 很多初学者常有此类困惑,“为

属性传值,协议传值,block传值,单例传值四种界面传值方式

一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N + 1界面传值.而在此基础上,必须知道跳转界面的明确位置及所要传的值的具体类型.在第二个界面中声明所要传值 类型的属性. @interface SecondViewController : UIViewController //声明一个字符串属性来保存第一个界面传过来的字符串内容 @propert

TabLayout:另一种Tab的实现方式

尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵 镇楼 在5.0以前我们想要实现像网易新闻客户端那样的的Tab可以有很多种选择: 比如古老的TabHost,3.0后ActionBar所提供的Tab,以及各种成熟的Tab开源控件等,都可以直接或间接地实现Tab的效果.然而,对于这样一种使用极多的控件,Android是不会放弃将它纳入麾下的打算的,于是乎在5.0后放出的design包中An

(转载)Android两种Tab分页的方式:TabActivity和ActivityGroup以及Android项目几种常见的应用架构

在Android里面Tab分页,常用的方法有两种: 一.TabActivity和TabHost的结合 1.主类继承TabActivity public class Tagpage extends TabActivity 2.获取当前TabHost对象 final TabHost tabHost = getTabHost(); 3.添加Tab分页标签,这里就是关键,把每个分页面链接成Activity.页面的跳转,即是Activity的跳转. tabHost.addTab(tabHost.newTa

angular 一个界面调用另一个界面的方式1

红色标记的hr都是顶级的module,每个路由节点都会引入hr这个module,所以这些嵌入的界面可以放在hr这个module下 angular.module('hr.templateCache').run(['$templateCache', function ($templateCache) { $templateCache.put('presc-create-modal.html', "<div hr-draggable class=\"create-presc\"