Android仿淘宝tab返回
一、概述
二、代码实现
首先,我们先来实现tab界面,这里我们使用radiogroup+fragment的方式
我们先来编写5个Fragment,这里仅作演示,所以简单编写了几个
public class Fragment1 extends Fragment{@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {TextView textView=new TextView(getActivity());textView.setText("Fragment1");return textView;}
}
public class FragmentFactory {private static SparseArray<Fragment> fragmentList=new SparseArray<>(); //fragment集合,保证每个fragment只被 实例一次public static Fragment getLocalFragment(int id) {Fragment fragment =fragmentList.get(id);if(fragment!=null)return fragment;switch (id) {case R.id.id_main_radio:fragment = new Fragment1();break;case R.id.id_change_radio:fragment = new Fragment2();break;case R.id.id_record_radio:fragment = new Fragment3();break;case R.id.id_setting_radio:fragment = new Fragment4();break;case R.id.id_shenqing_radio:fragment = new Fragment5();break;}fragmentList.put(id,fragment); //保存此fragment,方便下次调用return fragment;}
}
<?xml version="1.0" encoding="utf-8"?><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"xmlns:android="http://schemas.android.com/apk/res/android"><FrameLayoutandroid:id="@+id/frame"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><RadioGroupandroid:id="@+id/tabgroup"android:layout_width="fill_parent"android:layout_height="52dp"android:layout_gravity="bottom"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/id_main_radio"style="@style/weibo_tab"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:checked="true"android:drawableTop="@drawable/home"android:text="首页" /><RadioButtonandroid:id="@+id/id_change_radio"style="@style/weibo_tab"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/myservice"android:text="我的服务" /><RadioButtonandroid:id="@+id/id_shenqing_radio"style="@style/weibo_tab"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/myapply"android:text="申请" /><RadioButtonandroid:id="@+id/id_record_radio"style="@style/weibo_tab"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/cart"android:text="购物车" /><RadioButtonandroid:id="@+id/id_setting_radio"style="@style/weibo_tab"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:drawableTop="@drawable/mine"android:text="我" /></RadioGroup></RelativeLayout>
</LinearLayout>
style如下:
<style name="weibo_tab"><item name="android:layout_height">wrap_content</item><item name="android:layout_width">match_parent</item><item name="android:layout_weight">1</item><item name="android:gravity">center</item><item name="android:paddingTop">8dip</item><item name="android:background">@drawable/background</item><item name="android:paddingBottom">4dip</item><item name="android:button">@null</item><item name="android:textSize">12sp</item><item name="android:textColor">@drawable/radiotext</item></style>
最后就是我们的重中之重了,也就是我们的MainActivity:
好了,至此,我们的仿淘宝tab返回就算是基本完成了,快来看看我们的效果吧:
项目下载地址:点击下载demo
public class MainActivity extends FragmentActivity implementsOnCheckedChangeListener {private static RadioGroup tab_group;private FragmentManager fragmentManager;public Context context;private int[] radioIds; //存放所有Radiobutton的idprivate static Boolean isExit = false;private boolean isBack; //记录是都是返回,如果是返回则不调用onCheckedChanged@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main);context = MainActivity.this;initViews();fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();Fragment mainFragment=FragmentFactory.getLocalFragment(R.id.id_main_radio);transaction.add(R.id.frame, mainFragment, R.id.id_main_radio + "");transaction.addToBackStack(R.id.id_main_radio + ""); //放入栈底,保证每次都从首页退出transaction.commit();ActivityManager.getInstance().addActivity(this);}private void initViews() {tab_group = (RadioGroup) findViewById(R.id.tabgroup);tab_group.setOnCheckedChangeListener(this);radioIds = new int[] { R.id.id_main_radio, R.id.id_change_radio,R.id.id_shenqing_radio,R.id.id_record_radio, R.id.id_setting_radio };}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if(isBack){isBack=false;return; }else {tab_group.check(tab_group.getCheckedRadioButtonId());FragmentTransaction transaction = fragmentManager.beginTransaction();Fragment fragment1=fragmentManager.findFragmentByTag(checkedId + "");if(fragment1==null){//如果为空,则表明此fragment从来没有被点击过fragment1 = FragmentFactory.getLocalFragment(checkedId);transaction.addToBackStack(checkedId+"");}else {//该fragment已经入栈boolean isCurrent=false; //是否是当前栈for (int i=0,size=fragmentManager.getBackStackEntryCount();i<size;i++){String name=fragmentManager.getBackStackEntryAt(i).getName(); //获取当前栈名称if(isCurrent)fragmentManager.popBackStack();if(name.equals(checkedId+"")){isCurrent=true;}}}transaction.replace(R.id.frame, fragment1,checkedId+"");transaction.commit();}}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {FragmentManager fragmentManager=getSupportFragmentManager();int count=fragmentManager.getBackStackEntryCount();if(count>1){fragmentManager.popBackStack();isBack=true;BackStackEntry backstatck=getSupportFragmentManager().getBackStackEntryAt(count-1);RadioButton radioButton=(RadioButton) tab_group.findViewById(radioIds[(backstatck.getId()-1)%5]);radioButton.setChecked(true);}else {exitBy2Click();}}return false;}private void exitBy2Click() {Timer tExit = null;if (isExit == false) {isExit = true;Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();tExit = new Timer();tExit.schedule(new TimerTask() {@Overridepublic void run() {isExit = false;}}, 2000);} else {ActivityManager.getInstance().exit();}}
}
Android仿淘宝tab返回相关推荐
- Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
需要做一个仿淘宝客户端ViewPager滑动到最后一页,再拖动的时候跳到详情的功能,刚开始我也迷糊了,通过查阅相关资料发现有好多种实现方法,下面小编给大家分享实例代码,感兴趣的朋友一起看看吧 需要做一 ...
- Android仿淘宝淘口令实现
先复制信息到剪切板,然后再打开淘宝,.既然是复制,肯定是复制到系统的剪切板了,我们可以通过下边的代码来把口令给复制到系统的剪切板里 1 2 3 4 5 6 //获取剪贴板管理器: ClipboardM ...
- Android仿淘宝、京东Banner滑动查看图文详情
文章目录 写在前面 效果图 原理分析 核心代码 源码地址 写在前面 本文基于 ViewPager2 实现的 Banner 效果,进而实现了仿淘宝.京东Banner滑动至最后一页时继续滑动来查看图文详情 ...
- Android仿淘宝首页UI(附代源代码及示例图片)
Android仿淘宝首页UI(附代源代码及示例图片) 可以收获 运行出来的效果 部分代码 源代码 可以收获 更改Layout中的文字和drawble中的图片即可生成适应于不同情景的APP,帮助开发者完 ...
- Android 仿淘宝商品详情页下拉足迹Demo
DropDownMultiPager 仿淘宝等商品详情页下拉足迹效果SimpleDemo 可colne之后看MainActivity的调用,方便二次开发 依赖 compile 'com.nineold ...
- android仿淘宝语音搜索功能集成科大讯飞
样式: 1.集成科大讯飞:网上有很多集成方法. 2.写布局,注意帧布局有顺序谁在最上面,要在布局文件下面写.下面是我的布局,注意用Scrollview套,是因为要随键盘上下滑动. <Relati ...
- Android仿淘宝底部图标导航栏
在上一篇中,简单的使用透明主题的Activity实现了仿微信右侧顶部的对话框,上午又花了两个小时研究了一下淘宝底部的导航栏实现,网上的做法也有很多,今天我就使用一种通过基本控件加上布局的方式,没有任 ...
- Android 仿淘宝2017添加地址
最近想做个商城仿淘宝收货地址选择,在网上搜索"android 淘宝收货地址",就看到了想要的效果. 文章写的不错,可惜菜鸟级的我很多看不懂,所以用例外一种方式实现了. 这里用到的数 ...
- android 仿淘宝、京东商品详情页 向上拖动查看图文详情控件
一.淘宝商品详情页效果 先看一下淘宝详情页的效果 我们的效果 二.实现思路 使用两个scrollView,两个scrollView 竖直排列,通过自定义viewGroup来控制两个scrollView ...
最新文章
- 【转】 SLIC超像素分割详解(一):简介
- P5488 差分与前缀和(多项式/生成函数)
- Android RecyclerView封装下拉刷新与上拉加载更多
- 配置管理系统和整体变更系统有什么区别与联系
- 别让PPT把你绑架了
- Selenium 模拟键盘操作
- Arduino Uno ADS1115 数模转换
- osl倒数第三层_原子最外层、次外层及倒数第三层最多容纳电子数的解释
- 【网页截图亲测可用】Linux + python3 + selenium + chrome + chrome-driver 服务器端网页截图
- 增强现实技术(AR)的103个应用场景汇总
- UOJ132 【NOI2015】小园丁与老司机
- 个人信息安全现状及保护方法
- 用Python求三角形面积
- SCI检索号识别一法:UT-WOS与UT-ISI
- Android10闪退无日志,【报Bug】Android10手机白屏闪退
- 高中关于人工智能方面的课题_AI相关专业或成热门?高中生也可以入门“人工智能”...
- 计算机游戏比赛,计算机学习系统问世 机器会学习游戏比赛
- 江波龙入选国家级专精特新“小巨人”企业
- 深信服校园招聘c/c++ 软件开发A卷--菜鸡落泪
- SUST-ACM-2019届暑期ACM集训热身赛(第二期)题解