package net.csdn.blog.ruancoder;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends FragmentActivity implements View.OnClickListener {
private ImageView mChatImageView;
private ImageView mContactsImageView;
private ImageView mDiscoverImageView;
private ImageView mMineImageView;
private TextView mChatTextView;
private TextView mContactsTextView;
private TextView mDiscoverTextView;
private TextView mMineTextView;
private List<TabInfo> mTabs = new ArrayList<TabInfo>();
private TabInfo mLastTab;
private static final int TAB_INDEX_CHAT = 0;
private static final int TAB_INDEX_CONTACTS = 1;
private static final int TAB_INDEX_DISCOVER = 2;
private static final int TAB_INDEX_MINE = 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tab_chat_layout:
changePage(TAB_INDEX_CHAT);
break;
case R.id.tab_contacts_layout:
changePage(TAB_INDEX_CONTACTS);
break;
case R.id.tab_discover_layout:
changePage(TAB_INDEX_DISCOVER);
break;
case R.id.tab_mine_layout:
changePage(TAB_INDEX_MINE);
break;
}
}
private void changePage(int index) {
changeFragment(index);
changeTab(index);
}
private void changeFragment(int index) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
TabInfo tab = mTabs.get(index);
if (mLastTab == tab) {
return;
}
if (mLastTab != null) {
transaction.hide(mLastTab.fragment);// 隐藏上一次显示的tab页
}
if (tab.fragment == null) {
tab.fragment = Fragment.instantiate(this, tab.clazz.getName(), tab.args);
transaction.add(R.id.main_content, tab.fragment);// 如果当前点击的tab页首次创建,将其添加进来
} else {
transaction.show(tab.fragment);// 显示当前点击的tab页
}
transaction.commitAllowingStateLoss();
mLastTab = tab;
}
private void addTab(Class<? extends Fragment> clazz, Bundle args) {
TabInfo tabInfo = new TabInfo(clazz, args);
mTabs.add(tabInfo);
}
private class TabInfo {
private Fragment fragment;
private Class<?> clazz;// Fragment类的class对象
private Bundle args;// 传递参数的Bundle
TabInfo(Class<? extends Fragment> clazz, Bundle args) {
this.clazz = clazz;
this.args = args;
}
}
private void changeTab(int index) {
switch (index) {
case TAB_INDEX_CHAT:
setTabIcon(true, false, false, false);
break;
case TAB_INDEX_CONTACTS:
setTabIcon(false, true, false, false);
break;
case TAB_INDEX_DISCOVER:
setTabIcon(false, false, true, false);
break;
case TAB_INDEX_MINE:
setTabIcon(false, false, false, true);
break;
}
}
private void setTabIcon(boolean isChatSelected, boolean isContactsSelected, boolean isDiscoverSelected, boolean
isMineSelected) {
mChatImageView.setSelected(isChatSelected);
mContactsImageView.setSelected(isContactsSelected);
mDiscoverImageView.setSelected(isDiscoverSelected);
mMineImageView.setSelected(isMineSelected);
mChatTextView.setSelected(isChatSelected);
mContactsTextView.setSelected(isContactsSelected);
mDiscoverTextView.setSelected(isDiscoverSelected);
mMineTextView.setSelected(isMineSelected);
}
private void initView() {
mChatImageView = (ImageView) findViewById(R.id.tab_chat_icon);
mContactsImageView = (ImageView) findViewById(R.id.tab_contacts_icon);
mDiscoverImageView = (ImageView) findViewById(R.id.tab_discover_icon);
mMineImageView = (ImageView) findViewById(R.id.tab_mine_icon);
mChatTextView = (TextView) findViewById(R.id.tab_chat_text);
mContactsTextView = (TextView) findViewById(R.id.tab_contacts_text);
mDiscoverTextView = (TextView) findViewById(R.id.tab_discover_text);
mMineTextView = (TextView) findViewById(R.id.tab_mine_text);
findViewById(R.id.tab_chat_layout).setOnClickListener(this);
findViewById(R.id.tab_contacts_layout).setOnClickListener(this);
findViewById(R.id.tab_discover_layout).setOnClickListener(this);
findViewById(R.id.tab_mine_layout).setOnClickListener(this);
// 根据实际需求,可以通过Bundle往Fragment中传递参数
Bundle args = new Bundle();
addTab(ChatFragment.class, args);
addTab(ContactsFragment.class, null);
addTab(DiscoverFragment.class, null);
addTab(MineFragment.class, null);
// 默认选择第一个tab
changePage(0);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
使用Fragment实现Tab切换(高仿微信)
共28个文件
xml:11个
png:9个
java:5个
1星 需积分: 47 116 下载量 164 浏览量
2016-07-07
19:49:59
上传
评论
收藏 25KB RAR 举报
温馨提示
使用Activity+Fragment实现Tab切换效果,常见使用场景是应用的主界面,高仿微信。
资源推荐
资源详情
资源评论
收起资源包目录
TabFragment.rar (28个子文件)
TabFragment
app
proguard-rules.pro 678B
src
main
res
drawable
tab_icon_contacts_selector.xml 290B
tab_icon_mine_selector.xml 282B
tab_icon_chat_selector.xml 282B
tab_textcolor_selector.xml 260B
tab_icon_discover_selector.xml 290B
drawable-xxhdpi
tab_icon_discover_normal.png 2KB
ic_launcher.png 5KB
tab_icon_contacts_selected.png 1KB
tab_icon_mine_selected.png 1021B
tab_icon_contacts_normal.png 2KB
tab_icon_mine_normal.png 2KB
tab_icon_chat_selected.png 1KB
tab_icon_chat_normal.png 2KB
tab_icon_discover_selected.png 2KB
values
colors.xml 343B
strings.xml 280B
styles.xml 286B
layout
activity_main.xml 5KB
fragment.xml 837B
values-w820dp
java
net
csdn
blog
ruancoder
ChatFragment.java 647B
DiscoverFragment.java 651B
MainActivity.java 6KB
MineFragment.java 644B
ContactsFragment.java 654B
AndroidManifest.xml 652B
build.gradle 612B
libs
build.gradle 521B
共 28 条
- 1
资源评论
- 紫电好小子2017-02-17感觉内容不全,layout 中好几个id 找不到
- cnaaa82018-01-19感觉内容不全,layout 中好几个id 找不到
ruancoder
- 粉丝: 42
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功