• API 21弃用

  • values 中 string文件源码:

    <?xml version="1.0" encoding="utf-8"?>
    <resources> <string name="app_name">Day15_Actionbar_demo4</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <!--
    nums 对应网址
    -->
    <string-array name="paths">
    <item>http://c.m.163.com/nc/article/headline/T1348647853363/0-20.html</item>
    <item>http://c.m.163.com/nc/article/list/T1348648517839/0-20.html</item>
    <item>http://c.m.163.com/nc/article/list/T1348649079062/0-20.html</item>
    <item>http://c.m.163.com/nc/article/list/T1348648756099/0-20.html</item>
    </string-array>
    <!--由于地址返回json的根目录中只有这个名字 所以写死每个地址的根目录名 就可以只用一个解析了 -->
    <string-array name="nums">
    <item>T1348647853363</item>
    <item>T1348648517839</item>
    <item>T1348649079062</item>
    <item>T1348648756099</item>
    </string-array> </resources>
  • activity_main.xml源码:

    
    
    <!-- 直接作为fragment的容器 -->
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rl_fragment_id"
    tools:context=".MainActivity" > </RelativeLayout>
  • fragment填充对象源码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" > <ListView
    android:id="@+id/lv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    /> </LinearLayout>
  • MainActivity.java:

    package com.qf.day15_actionbar_demo4;
    
    import java.util.HashMap;
    import java.util.Map; import com.qf.day15_actionbar_demo4.fragment.MyFragment; import android.os.Bundle;
    import android.app.ActionBar;
    import android.app.ActionBar.Tab;
    import android.app.ActionBar.TabListener;
    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentTransaction;
    import android.util.Log;
    import android.view.Menu;
    import android.widget.Toast; public class MainActivity extends Activity implements TabListener{ private Map<Integer, Fragment> fragmentMap; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //将集合实例化
    fragmentMap = new HashMap<Integer, Fragment>(); //获取ActionBar
    ActionBar actionBar = getActionBar();
    //设置导航模式
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab tab = actionBar.newTab();
    tab.setIcon(android.R.drawable.ic_menu_add);
    tab.setText("头条");
    tab.setTabListener(this);
    actionBar.addTab(tab, true); tab = actionBar.newTab();
    tab.setIcon(android.R.drawable.ic_menu_call);
    tab.setText("娱乐");
    tab.setTabListener(this);
    actionBar.addTab(tab); tab = actionBar.newTab();
    tab.setIcon(android.R.drawable.ic_menu_camera);
    tab.setText("财经");
    tab.setTabListener(this);
    actionBar.addTab(tab); tab = actionBar.newTab();
    tab.setIcon(android.R.drawable.ic_menu_crop);
    tab.setText("体育");
    tab.setTabListener(this);
    actionBar.addTab(tab);
    } /**
    * 选择Tab 事件监听
    */
    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    //你点击的是那个Tab 位置获取出来
    // int pos = tab.getPosition();
    //
    // MyFragment myFragment = new MyFragment();
    //
    // Bundle bundle = new Bundle();
    // bundle.putInt("pos", pos);
    // myFragment.setArguments(bundle);
    //
    //
    // ft.replace(R.id.rl_fragment_id, myFragment);
    // //.commit(); 不需要加提交 不需要 添加回退 Log.e("AAA", tab.getPosition()+""); Fragment fragment = fragmentMap.get(tab.getPosition()); if(fragment==null){
    fragment = new MyFragment();
    Bundle bundle = new Bundle();
    bundle.putInt("pos", tab.getPosition());
    fragment.setArguments(bundle);
    fragmentMap.put(tab.getPosition(), fragment);
    ft.add(R.id.rl_fragment_id, fragment); }else{
    ft.show(fragment);
    }
    } /**
    * 重选Tab 双击
    */
    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub } /**
    * 用户选择另一个tab标签的时候触发
    */
    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    //没有被选择的Tab
    Fragment fragment = fragmentMap.get(tab.getPosition());
    Toast.makeText(this, tab.getPosition()+"", 0).show();
    if(fragment!=null){
    ft.hide(fragment);
    }
    } }
  • MyTask.java 一个异步任务 用于加载网络数据:

    package com.qf.day15_actionbar_demo4.asynctask;
    
    import java.util.List;
    
    import com.qf.day15_actionbar_demo4.interface0.CallBackData;
    import com.qf.day15_actionbar_demo4.utils.HttpUtils;
    import com.qf.day15_actionbar_demo4.utils.ParseJson; import android.os.AsyncTask; public class MyTask extends AsyncTask<String, Void, List<String>>{ private String num;
    private CallBackData callBackData; public MyTask(String num,CallBackData callBackData){
    this.num = num;
    this.callBackData = callBackData;
    } @Override
    protected List<String> doInBackground(String... params) {
    // TODO Auto-generated method stub
    String jsonStr = HttpUtils.getStr(params[0]);
    //解析数据
    return ParseJson.getData(num, jsonStr);
    } @Override
    protected void onPostExecute(List<String> result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result); if(result!=null&&result.size()>0){
    callBackData.sendData(result);
    } } }
  • Fragment.java :

    package com.qf.day15_actionbar_demo4.fragment;
    
    import java.util.List;
    
    import com.qf.day15_actionbar_demo4.R;
    import com.qf.day15_actionbar_demo4.asynctask.MyTask;
    import com.qf.day15_actionbar_demo4.interface0.CallBackData; import android.app.Activity;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView; public class MyFragment extends Fragment{ private ListView lv; int pos ; private String path,num;//请求地址 和请求数据的解析需要的对象 @Override
    public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity); pos = getArguments().getInt("pos");
    String[] paths = getResources().getStringArray(R.array.paths);
    String[] nums = getResources().getStringArray(R.array.nums); path = paths[pos];
    num = nums[pos];
    } @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // TODO Auto-generated method stub View view = inflater.inflate(R.layout.layout, container, false); lv = (ListView) view.findViewById(R.id.lv); return view;
    } @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    //开启异步任务 请求数据 展示数据 new MyTask(num, new CallBackData() { @Override
    public void sendData(List<String> list) {
    // TODO Auto-generated method stub
    Log.e("AAA", "===path=="+path);
    Log.e("AAA", "===list=="+list.size());
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
    android.R.layout.simple_list_item_1, list); lv.setAdapter(adapter);
    }
    }).execute(path); } @Override
    public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden);
    Log.e("AAA", "==onHiddenChanged==");
    } }
  • 一个回调接口:

    package com.qf.day15_actionbar_demo4.interface0;
    
    import java.util.List;
    
    public interface CallBackData {
    
        public void sendData(List<String> list);
    
    }
  • 一个网络下载代码:
package com.qf.day15_actionbar_demo4.utils;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; public class HttpUtils { public static String getStr(String path) {
// TODO Auto-generated method stub
HttpURLConnection connection = null;
InputStream is = null;
try {
URL url = new URL(path); connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.connect(); if(connection.getResponseCode()==200)
{
is = connection.getInputStream(); StringBuilder sBuilder = new StringBuilder(); byte[] buffer = new byte[1024];
int len = 0; while ((len=is.read(buffer))!=-1) { sBuilder.append(new String(buffer,0,len)); } return sBuilder.toString();
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
if(connection!=null)
{
connection.disconnect();
}
if (is!=null) { try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
} }
  • 解析json数据工具类:

    package com.qf.day15_actionbar_demo4.utils;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL; public class HttpUtils { public static String getStr(String path) {
    // TODO Auto-generated method stub
    HttpURLConnection connection = null;
    InputStream is = null;
    try {
    URL url = new URL(path); connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.connect(); if(connection.getResponseCode()==200)
    {
    is = connection.getInputStream(); StringBuilder sBuilder = new StringBuilder(); byte[] buffer = new byte[1024];
    int len = 0; while ((len=is.read(buffer))!=-1) { sBuilder.append(new String(buffer,0,len)); } return sBuilder.toString();
    } } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally
    {
    if(connection!=null)
    {
    connection.disconnect();
    }
    if (is!=null) { try {
    is.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    return null;
    } }

15 ActionBar.Tab 以及保存fragment对象 代码案例的更多相关文章

  1. Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager

    action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...

  2. ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示

    1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...

  3. Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面

    感觉 Android 到处都是坑,每个地方都要把人折腾半天. 今天来简单说说 Android之ActionBar.Tabs.Fragment.ViewPager 实现标签页切换并缓存页面 关于他们的介 ...

  4. Android 原生 Android ActionBar Tab (滑动)导航

    本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...

  5. 使用ActionBar Tab

    使用ActionBar Tab(地址) 本文实现将页面分为多个选项卡,并在每一个选项卡中显示一个ListView. 创建新Layout - ActionbarTab.axml, 并向页面中添加Fram ...

  6. 15 ActionBar 总结

    ActionBar 一, 说明 是一个动作栏 是窗口特性 提供给用户动作 导航模式 可以适配不同的屏幕 二, ActionBar 提供的功能 1. 显示菜单项 always:总是展示到ActionBa ...

  7. fragment做成选项卡,tab效果。 fragment+RadioGroup

    fragment做成选项卡,tab效果. fragment+RadioGroup from://http://blog.csdn.net/zimo2013/article/details/122393 ...

  8. Android Actionbar Tab 导航模式

    Android Actionbar Tab 下图中,红色矩形圈起来的就是我们 ActionBar Tab,下面我们将一步一步的实现下图中的效果. 初次尝试 package com.example.it ...

  9. [Android]AndroidDesign中ActionBar探究2 嵌入Fragment

    上一节我们只是简单了介绍了Android Design风格中的ActionBar的简单实用,如添加MenuItem,这节我们会进一步了解ActionBar的其他功能. 在Android Develop ...

随机推荐

  1. poj 1265 Area 面积+多边形内点数

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5861   Accepted: 2612 Description ...

  2. 探索C++多态和实现机理

    前一段时间被问到过一个问题,当时模模糊糊,就是说不清楚,问题问到说:什么情况下会将基类的析构函数定义成虚函数? 当时想到 如果子类B继承了父类A,那么定义出一个子类对象b,析构时,调用完子类析构函数, ...

  3. salt基本使用之二(2)

    1.Event和Reactor Event是saltstack里面的对每个事件的一个记录,相比job更加底层. 一,查看Event事件 可以在master下再开一个终端执行以下命令可以查看Event事 ...

  4. ubuntu 系统应用安装方式

    转载   ubuntu系统软件安装 来源:http://www.linuxidc.com/Linux/2011-02/32211.htm 首先说明一下 ubuntu 的软件安装大概有几种方式:1. d ...

  5. ubuntu14.0464位 Ros环境 安装halcon13.01

    至于ROS的系统,之前就是安装好的,如果有疑问的可以参考官网的安装教程,按照指令一步一步的操作,http://wiki.ros.org/cn/indigo/Installation/Ubuntu (1 ...

  6. 一个页面从输入url到页面加载显示完成,中间都经历了什么

    第一种解释: 一般会经历以下几个过程: 1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作. 3 ...

  7. AsyncLocal 与 async await

    大家来看一张图 先猜猜看为什么会这样 关于async await的原理 建议查看 https://blog.csdn.net/brook_shi/article/details/50803957 这篇 ...

  8. js强大的日期格式化函数,不仅可以格式化日期,还可以查询星期,一年中第几天等

    js强大的日期格式化,timestamp支持10位或13位的时间戳,或是时间字符串,同时支持android ios的处理,不只是日期的格式化还有其它方法,比如获 获取某月有多少天 .获取某个日期在这一 ...

  9. python笔记十(列表生成式、字典生成式、生成器、生成器的并行)

    一.列表生成式 列表生成式就是python设置的可以用来可以生成列表的. 如要生成一个0-9的列表我们可以通过以下代码实现: >>> list(range(10)) [0, 1, 2 ...

  10. Node.js DNS 模块

    Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var dns = require("dns") 方法 序号 方法 & 描述 1 dns.loo ...