15 ActionBar.Tab 以及保存fragment对象 代码案例
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对象 代码案例的更多相关文章
- Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager
action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...
- ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示
1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...
- Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面
感觉 Android 到处都是坑,每个地方都要把人折腾半天. 今天来简单说说 Android之ActionBar.Tabs.Fragment.ViewPager 实现标签页切换并缓存页面 关于他们的介 ...
- Android 原生 Android ActionBar Tab (滑动)导航
本文内容 环境 项目结构 演示一:ActionBar Tab 导航 演示二:ActionBar Tab 带滑动导航 本文演示 Tab 导航.第一个演示,是基本的 Tab 导航,第二个是带滑动的 Tab ...
- 使用ActionBar Tab
使用ActionBar Tab(地址) 本文实现将页面分为多个选项卡,并在每一个选项卡中显示一个ListView. 创建新Layout - ActionbarTab.axml, 并向页面中添加Fram ...
- 15 ActionBar 总结
ActionBar 一, 说明 是一个动作栏 是窗口特性 提供给用户动作 导航模式 可以适配不同的屏幕 二, ActionBar 提供的功能 1. 显示菜单项 always:总是展示到ActionBa ...
- fragment做成选项卡,tab效果。 fragment+RadioGroup
fragment做成选项卡,tab效果. fragment+RadioGroup from://http://blog.csdn.net/zimo2013/article/details/122393 ...
- Android Actionbar Tab 导航模式
Android Actionbar Tab 下图中,红色矩形圈起来的就是我们 ActionBar Tab,下面我们将一步一步的实现下图中的效果. 初次尝试 package com.example.it ...
- [Android]AndroidDesign中ActionBar探究2 嵌入Fragment
上一节我们只是简单了介绍了Android Design风格中的ActionBar的简单实用,如添加MenuItem,这节我们会进一步了解ActionBar的其他功能. 在Android Develop ...
随机推荐
- ●BZOJ 4596 [Shoi2016]黑暗前的幻想乡
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4596 题解: 容斥,矩阵树定理,矩阵行列式 先说说容斥:(一共有 N-1个公司) 令 f[i ...
- Codeforces 700E. Cool Slogans
Description 给定一个串 \(S\),求一个序列 \(a_i\),满足 \(a_i\) 是原串的子串,且 \(a_i\) 在 \(a_{i-1}\) 中至少出现两次,求这个序列的最大的长度 ...
- ●BZOJ 2669 [cqoi2012]局部极小值
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2669 题解: 容斥,DP,DFS 先看看 dp 部分:首先呢,X的个数不会超过 8个.个数很 ...
- 【CodeVs 6128 Lence的方块们】
·希望除了内部人员以外能有人通过这道题,因为这是大米饼第一次改编的题 ·我所见到的"本题原版"的题解也很少,搜索一下应该是: #include<stdio.h> #in ...
- VK-Cup2017 Wild Card Round 2
来自FallDream的博客,未经允许,请勿转载,谢谢. Cf的Vkcup外卡赛2 上次round2和ditoly翻车了 所以只好来打打了 规则是给一道比较特殊的题目,你要找出较优的解 Unive ...
- CTSC2017 铁牌记
Day 0: 先到了丽都酒店. 看见北京八十中学生在发胸牌手册和T恤,领完之后开始分房间. 我和ryc一屋,lyd和ysq一屋,yzy和gzz分到了珀利酒店,老师尝试了半天把我们分到一个酒店,失败了. ...
- Python的序列类型——List
List 列表 List,本质是一个链表,从链表的实现角度来讲,链表的每一个结点都存放着值和指向下一个节点的指针. 因此链表在内存的存储可以是不连续的,它是一种高效的数据结构.因此列表与字符串的区别是 ...
- Ubuntu16 编译源码安装MXNet 可变卷积Deformable-ConvNets GPU版
[引言]最近接手了公司的关于虫子识别的项目,使用MXNet框架开发,但是实际用的是Deformable-ConvNets. Deformable-ConvNets为微软研究研究院提出的可变卷积网络,可 ...
- 笔记12 注入AspectJ切面
虽然Spring AOP能够满足许多应用的切面需求,但是与AspectJ相比, Spring AOP 是一个功能比较弱的AOP解决方案.AspectJ提供了Spring AOP所不能支持的许多类型的切 ...
- JavaBean toString方式
package object; import java.util.Date; public class ReportDataQo implements java.io.Serializable { p ...