Fragment实现底部Tab,切换可保存状态

activity_main.xml

 1 <RelativeLayout 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
 6     <FrameLayout
 7         android:id="@+id/mHomeContainer"
 8         android:layout_width="match_parent"
 9         android:layout_height="match_parent"
10         android:layout_above="@+id/mRadioGroup" >
11     </FrameLayout>
12
13     <RadioGroup
14         android:id="@+id/mRadioGroup"
15         android:layout_width="match_parent"
16         android:layout_height="56dp"
17         android:layout_alignParentBottom="true"
18         android:background="@drawable/main_bottom_bg"
19         android:orientation="horizontal" >
20
21         <ImageView
22             android:id="@+id/Tab_Conversation"
23             android:layout_width="wrap_content"
24             android:layout_height="wrap_content"
25             android:layout_weight="1"
26             android:contentDescription="@null"
27             android:src="@drawable/skin_tab_icon_conversation_selected" />
28
29         <ImageView
30             android:id="@+id/Tab_Contact"
31             android:layout_width="wrap_content"
32             android:layout_height="wrap_content"
33             android:layout_weight="1"
34             android:contentDescription="@null"
35             android:src="@drawable/skin_tab_icon_contact_normal" />
36
37         <ImageView
38             android:id="@+id/Tab_Plugin"
39             android:layout_width="wrap_content"
40             android:layout_height="wrap_content"
41             android:layout_weight="1"
42             android:contentDescription="@null"
43             android:src="@drawable/skin_tab_icon_plugin_normal" />
44     </RadioGroup>
45
46 </RelativeLayout>

关键代码:

  1 import com.lidroid.xutils.ViewUtils;
  2 import com.lidroid.xutils.view.annotation.ContentView;
  3 import com.lidroid.xutils.view.annotation.ViewInject;
  4 import com.lidroid.xutils.view.annotation.event.OnClick;
  5 import android.support.v4.app.Fragment;
  6 import android.support.v4.app.FragmentTransaction;
  7 import android.support.v7.app.ActionBarActivity;
  8 import android.view.View;
  9 import android.view.Window;
 10 import android.widget.ImageView;
 11 import android.content.Context;
 12 import android.os.Bundle;
 13
 14 @ContentView(R.layout.activity_main)
 15 public class MainActivity extends ActionBarActivity {
 16
 17     @ViewInject(R.id.Tab_Conversation)
 18     private ImageView Tab_Conversation;
 19     @ViewInject(R.id.Tab_Contact)
 20     private ImageView Tab_Contact;
 21     @ViewInject(R.id.Tab_Plugin)
 22     private ImageView Tab_Plugin;
 23
 24     private FragmentConversation mFragmentConversation;
 25     private FragmentContact mFragmentContact;
 26     private FragmentPlugin mFragmentPlugin;
 27     private Context mContext;
 28
 29     @Override
 30     protected void onCreate(Bundle savedInstanceState) {
 31         super.onCreate(savedInstanceState);
 32         requestWindowFeature(Window.FEATURE_NO_TITLE);
 33         ViewUtils.inject(this);
 34         mContext = this;
 35         InitFragment();
 36         getSupportFragmentManager().beginTransaction()
 37                 .add(R.id.mHomeContainer, mFragmentConversation).commit();
 38     }
 39
 40     private void InitFragment() {
 41         mFragmentConversation = new FragmentConversation();
 42         mFragmentContact = new FragmentContact();
 43         mFragmentPlugin = new FragmentPlugin();
 44     }
 45
 46     /**
 47      * 隐藏其他所有Fragment
 48      */
 49     private void HideOtherFragments(Fragment fragment) {
 50         if (getSupportFragmentManager().getFragments() == null) {
 51             return;
 52         }
 53         for (Fragment fm : getSupportFragmentManager().getFragments()) {
 54             if (fm != fragment) {
 55                 getSupportFragmentManager().beginTransaction().hide(fm)
 56                         .commit();
 57             }
 58         }
 59     }
 60
 61     /**
 62      * Tab切换
 63      *
 64      * @param view
 65      */
 66     @OnClick({ R.id.Tab_Conversation, R.id.Tab_Contact, R.id.Tab_Plugin })
 67     private void OnTabSelected(View view) {
 68         ClearSelection();
 69         FragmentTransaction mTransaction = getSupportFragmentManager()
 70                 .beginTransaction();
 71         switch (view.getId()) {
 72         case R.id.Tab_Conversation:
 73             Tab_Conversation.setImageDrawable(getResources().getDrawable(
 74                     R.drawable.skin_tab_icon_conversation_selected));
 75             if (!getSupportFragmentManager().getFragments().contains(
 76                     mFragmentConversation)) {
 77                 mTransaction.add(R.id.mHomeContainer, mFragmentConversation);
 78             }
 79             mTransaction.show(mFragmentConversation);
 80             HideOtherFragments(mFragmentConversation);
 81             break;
 82         case R.id.Tab_Contact:
 83             Tab_Contact.setImageDrawable(getResources().getDrawable(
 84                     R.drawable.skin_tab_icon_contact_selected));
 85             if (!getSupportFragmentManager().getFragments().contains(
 86                     mFragmentContact)) {
 87                 mTransaction.add(R.id.mHomeContainer, mFragmentContact);
 88             }
 89             mTransaction.show(mFragmentContact);
 90             HideOtherFragments(mFragmentContact);
 91             break;
 92         case R.id.Tab_Plugin:
 93             Tab_Plugin.setImageDrawable(getResources().getDrawable(
 94                     R.drawable.skin_tab_icon_plugin_selected));
 95             if (!getSupportFragmentManager().getFragments().contains(
 96                     mFragmentPlugin)) {
 97                 mTransaction.add(R.id.mHomeContainer, mFragmentPlugin);
 98             }
 99             mTransaction.show(mFragmentPlugin);
100             HideOtherFragments(mFragmentPlugin);
101             break;
102         default:
103             break;
104         }
105         mTransaction.commit();
106     }
107
108     /**
109      * 清除所有选中状态
110      */
111     private void ClearSelection() {
112         Tab_Conversation.setImageDrawable(getResources().getDrawable(
113                 R.drawable.skin_tab_icon_conversation_normal));
114         Tab_Contact.setImageDrawable(getResources().getDrawable(
115                 R.drawable.skin_tab_icon_contact_normal));
116         Tab_Plugin.setImageDrawable(getResources().getDrawable(
117                 R.drawable.skin_tab_icon_plugin_normal));
118     }
119
120 }
时间: 2024-10-12 12:20:42

Fragment实现底部Tab,切换可保存状态的相关文章

Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换

Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换 Android学习笔记:TabHost 和 FragmentTabHost

解决Fragment在Viepager中切换不保存状态的问题

在FragmentPagerAdapter中重写以下方法: 1 @Override 2 public Object instantiateItem(ViewGroup container, int position) { 3 Fragment fragment = (Fragment) super.instantiateItem(container, position); 4 fm.beginTransaction().show(fragment).commit(); 5 6 return fr

Android组件:Fragment切换后保存状态

之前写的第一篇Fragment实例,和大多数人一开始学的一样,都是通过FragmentTransaction的replace方法来实现,replace方法相当于先移除remove()原来所有已存在的fragments,然后添加add()当前这个fragment.这就导致了一个问题,我们切换一次,然后再切换回来,相当于重新加载了这个fragment,原来的状态不复存在,这显然与我们的日常使用不符.想要保存切换后的状态,思路还是很简单的,我们先添加了若干fragments,切换后将所有fragmen

记录一下做小程序tab切换并保存check选中状态的操作。

这里需要记录下你当前选中check的状态(具有唯一性的都可以).我是直接存在storage里面了.然后切换的时候拿数据列表的值和缓存中的值进行比较.如果符合的话就选中.但是一般的单层for循环无法完成.会有一些问题达不到目的.利用双层循环的话来比对他们的值就行了 reg = "缓存数组中的值" this.goodsList = "拿到的数据" for (let i = 0; i < this.goodsList.length; i++) { for (let

Activity内切换fragment实现底部菜单切换遇到的坑

1.一般说来,app底部导航都会设计为5个菜单,可以使用textView,也可使用radioButton,这里我选择用radioButton,给radioButton直接设置selector就可以实现背景变换. 2.接下来说说,fragment切换的实现方式.大家都知道切换fragment有两种方式: ① replace直接替换: fragmentManager.beginTransaction().replace(R.id.ll_container, fg_home).addToBackSta

viewpager+fragment三页面tab切换并且实现同时上传三个页面的信息

一:代码:首先是主页面: package com.example.admin.myviewpager; import android.content.Context;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatAc

lottie动画实战(仿汽车之家底部Tab切换动画)

GitHub地址:https://github.com/kongpf8848/Animation 效果如下: 主要是自定义View继承LottieAnimationView并实现Checkable接口,代码如下: import android.content.Context; import android.util.AttributeSet; import android.widget.Checkable; import com.airbnb.lottie.LottieAnimationView

Android典型界面设计-访网易新闻实现双导航tab切换

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

Android典型界面设计(3)——访网易新闻实现双导航tab切换

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p