支付宝20万限额怎么写externalfragment 这个类怎么写

3198人阅读
java andriod(59)
原文同步发布于我的wiki,查看原文或更新请移步:
支付宝产品大全
商家收款产品 (应用于互联网交易的基础产品)无线产品商家付款产品 (应用于商家间结算货款,支付交易费用的付款方案)增值服务 (为商家提供便利、增加销量的各类服务)平台商产品 (专为交易平台所提供的收款方案)
无线产品-快捷支付(无线)
简介: 快捷支付(无线)是一种程序式的支付方式,在手机、掌上电脑等无线设备的应用程序内,买家可通过支付宝进行付款购买特定服务或商品,资金即时到账。签约指南&
用户使用场景:
01 买家在手机应用中购买商品或服务
02 买家选择通过支付宝快捷支付(无线)进行支付
03 进入支付宝收银台进行付款
04 支付成功
05 交易完成,买家可查看交易信息
这就是我在手机端想要的服务, 继续走起
产品优势, 略计费及服务周期, 略技术集成, 重点
下载集成开发包解压得3目录:
即时到账批量退款有密接口-refund_fastpay_by_platform_pwd(), 后台管理相关-对通过即时到账接口付款完成的交易进行部分或全部的退还, 这里暂略过无线产品LOGO, 略移动支付接口SDK2.0标准版(), 客户端相关
/DEMO/openssl, RAS公钥私钥生成工具/DEMO/服务端demo,服务器异步通知/DEMO/客户端demo/支付宝移动支付SDK标准版(Android 2.1.1).zip, 重点解读/DEMO/客户端demo/支付宝移动支付SDK标准版(iOS 2.1.2).zip/更新日志.txt/移动支付接口SDK2.0标准版.pdf, 需重点阅读/移动支付接口SDK2.0标准版接入与使用规则.pdf, 需重点阅读
支付宝移动支付SDK标准版(Android 2.1.1).zip
AndroidManifest.xml
1. 一些必要的权限
2. 常规的 &application 节点, 包括你的各种组件
3. 重点, alipay sdk相关, 进到对应的jar包查看, 这个是和支付时web页面跳转相关
&!-- alipay sdk begin --&
android:name=&com.alipay.sdk.app.H5PayActivity&
android:configChanges=&orientation|keyboardHidden|navigation&
android:exported=&false&
android:screenOrientation=&behind&
android:windowSoftInputMode=&adjustResize|stateHidden& &
&/activity&
&!-- alipay sdk end --&
// 感兴趣的同学可用jd-jui查看, 代码混淆的不严重, 下面是我的初步理解
alipaysdk.jar //页面跳转相关, 采用webview
alipaysecsdk.jar //设备安全相关
alipayutdid.jar //提供了不少工具类
Base64.java //不清楚的同学见下面相关链接
ExternalFragment.java //加载ui
PayDemoActivity.java //下面重点分析, sdk提供的接口和相关的输入信息
Result.java //结果处理,工具类
SignUtils.java //加密工具类
PayDemoActivity.java 分析
package com.alipay.sdk.pay.
import java.io.UnsupportedEncodingE
import java.net.URLE
import java.text.SimpleDateF
import java.util.D
import java.util.L
import java.util.R
import android.os.B
import android.os.H
import android.os.M
import android.support.v4.app.FragmentA
import android.text.TextU
import android.view.V
import android.widget.T
import com.alipay.sdk.app.PayT
public class PayDemoActivity extends FragmentActivity {
public static final String PARTNER = &&;//pid,在文档中有说明
public static final String SELLER = &&;//卖家支付宝账号
public static final String RSA_PRIVATE = &&;//卖家私钥,文档中有说明
public static final String RSA_PUBLIC = &&;//支付宝公钥,demo中暂未用到
private static final int SDK_PAY_FLAG = 1;
private static final int SDK_CHECK_FLAG = 2;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
Result resultObj = new Result((String) msg.obj);
String resultStatus = resultObj.resultS
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, &9000&)) {
Toast.makeText(PayDemoActivity.this, &支付成功&,
Toast.LENGTH_SHORT).show();
// 判断resultStatus 为非“9000”则代表可能支付失败
// “8000” 代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, &8000&)) {
Toast.makeText(PayDemoActivity.this, &支付结果确认中&,
Toast.LENGTH_SHORT).show();
Toast.makeText(PayDemoActivity.this, &支付失败&,
Toast.LENGTH_SHORT).show();
case SDK_CHECK_FLAG: {
Toast.makeText(PayDemoActivity.this, &检查结果为:& + msg.obj,
Toast.LENGTH_SHORT).show();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_main);
* call alipay sdk pay. 调用SDK支付
public void pay(View v) {
//获取订单信息,内有详细说明
String orderInfo = getOrderInfo(&测试的商品&, &该测试商品的详细描述&, &0.01&);
//用卖家私钥对订单签名
String sign = sign(orderInfo);
// 仅需对sign 做URL编码
sign = URLEncoder.encode(sign, &UTF-8&);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
//支付宝接口参数构成
final String payInfo = orderInfo + &&sign=\&& + sign + &\&&&
+ getSignType();
Runnable payRunnable = new Runnable() {
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(PayDemoActivity.this);
// 调用支付接口
String result = alipay.pay(payInfo);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
mHandler.sendMessage(msg);
Thread payThread = new Thread(payRunnable);
payThread.start();
* check whether the device has authentication alipay account.
* 查询终端设备是否存在支付宝认证账户
public void check(View v) {
Runnable checkRunnable = new Runnable() {
public void run() {
PayTask payTask = new PayTask(PayDemoActivity.this);
//调用查询接口
boolean isExist = payTask.checkAccountIfExist();
Message msg = new Message();
msg.what = SDK_CHECK_FLAG;
msg.obj = isE
mHandler.sendMessage(msg);
Thread checkThread = new Thread(checkRunnable);
checkThread.start();
* get the sdk version. 获取SDK版本号
public void getSDKVersion() {
PayTask payTask = new PayTask(this);
//调用版本号接口
String version = payTask.getVersion();
Toast.makeText(this, version, Toast.LENGTH_SHORT).show();
* create the order info. 创建订单信息
public String getOrderInfo(String subject, String body, String price) {
// 合作者身份ID
String orderInfo = &partner=& + &\&& + PARTNER + &\&&;
// 卖家支付宝账号
orderInfo += &&seller_id=& + &\&& + SELLER + &\&&;
// 商户网站唯一订单号
orderInfo += &&out_trade_no=& + &\&& + getOutTradeNo() + &\&&;
// 商品名称
orderInfo += &&subject=& + &\&& + subject + &\&&;
// 商品详情
orderInfo += &&body=& + &\&& + body + &\&&;
// 商品金额
orderInfo += &&total_fee=& + &\&& + price + &\&&;
// 服务器异步通知页面路径
orderInfo += &&notify_url=& + &\&& + &http://notify.msp.hk/notify.htm&
+ &\&&;
// 接口名称, 固定值
orderInfo += &&service=\&mobile.securitypay.pay\&&;
// 支付类型, 固定值
orderInfo += &&payment_type=\&1\&&;
// 参数编码, 固定值
orderInfo += &&_input_charset=\&utf-8\&&;
// 设置未付款交易的超时时间
// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
// 取值范围:1m~15d。
// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
// 该参数数值不接受小数点,如1.5h,可转换为90m。
orderInfo += &&it_b_pay=\&30m\&&;
// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
orderInfo += &&return_url=\&\&&;
// 调用银行卡支付,需配置此参数,参与签名, 固定值
// orderInfo += &&paymethod=\&expressGateway\&&;
return orderI
* get the out_trade_no for an order. 获取外部订单号
public String getOutTradeNo() {
//demo, 一般需对应后台系统生成
SimpleDateFormat format = new SimpleDateFormat(&MMddHHmmss&,
Locale.getDefault());
Date date = new Date();
String key = format.format(date);
Random r = new Random();
key = key + r.nextInt();
key = key.substring(0, 15);
* sign the order info. 对订单信息进行签名
* @param content
待签名订单信息
public String sign(String content) {
return SignUtils.sign(content, RSA_PRIVATE);
* get the sign type we use. 获取签名方式
public String getSignType() {
return &sign_type=\&RSA\&&;
RSA密钥使用逻辑
商户在使用 RSA 签名方式的支付宝接口时,真正会用到的密钥是商户私钥与支付 宝公钥。商户上传公钥给支付宝,支付宝把公钥给商户,是公钥互换的操作。这就 使得商户使用自己的私钥做签名时,支付宝端会根据商户上传的公钥做验证签名。 商户使用支付宝公钥做验证签名时,同理,也是因为支付宝用支付宝私钥做了签名。
向支付宝申请签约, 签约指南利用集成开发包里的openssl生成RSA密钥对,并上传你的公钥到支付宝构建相应的后台系统,如订单管理,服务器异步通知,即时到账批量退款等按照上面分析的demo结构,构建你的android客户端(3个jar,AndroidManifest的配置,支付宝接口调用(用到的信息:pid,卖家支付宝帐号,卖家私钥,支付宝公钥等))支付宝android的三个独立接口:PayTask.pay PayTask.checkAccountIfExist PayTask.getVersion在调研了微信支付后,学得一点,将支付宝PayTask.pay的参数串orderInfo放到后台处理,客户端不保存任何商户信息,这样可在一定程度上增强安全性和灵活性。
完整流程见'签约指南'或者认证后的&实名认证
企业帐号申请被驳回一次,法人身份证背面照不够清晰; 之后提交并通过。帐号通过后,要按照支付宝的要求,他给我们申请的帐号打了0.11元,你再给他打回去。确认帐号正常。
签约申请'移动支付'
上传app,填资料后待审核(注:要是app开发基本差不多了,可以直接传app上去;或者给出开发文档,要求是尽量细致的介绍应用,多配截图,保证通过验证)()
按照官方文档生成相关的RSA公钥私钥并上传公钥到支付宝具体见文档(具体操作是粘贴到&&'合作伙伴密钥管理'
-& 'RSA加密' -& '添加密钥', 之后自动得到支付宝的公钥)
生成密钥的相关命令如下:
1)生成RSA私钥
genrsa -out rsa_private_key.pem 1024
2)把RSA私钥转换成PKCS8格式
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
3)生成RSA公钥
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
修改支付宝demo工程, 更新demo中合作者身份(PID),卖家支付宝帐号,卖家RSA私钥,支付宝公钥运行demo, 点击支付, launch输入支付密码页面(用户自己的支付宝帐号), 输入支付密码后,成功支付!!!登录企业帐号并查看交易记录&有一条测试的交易记录了。
点击退款, 并到测试手机查看余额信息。 一切OK, 搞定!!!
Base64,&RSA加解密示例,
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:88742次
积分:2326
积分:2326
排名:第11536名
原创:103篇
评论:28条
文章:40篇
阅读:37222
文章:27篇
阅读:25466
(1)(2)(1)(2)(2)(1)(2)(1)(2)(2)(2)(2)(2)(4)(4)(4)(3)(8)(12)(10)(22)(9)(13)下次自动登录
现在的位置:
& 综合 & 正文
Android Fragment实现QQ的主界面功能
Fragment的利用越来越多了,QQ、新浪微博,支付宝的主界面,都可以用Fragment来实现。
现在,我们就利用Fragment来实现QQ的主界面功能,先上图:
我们可以看到,在QQ主界面的下面,有一行tab,有四个选项,可以实现切换。
新建一个项目,起名为FragmentDemoDemo。创建或者打开activity_main.xml作为的主布局文件,加入如下:
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" &
&FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
&/FrameLayout&
&LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/tab_bg" &
&RelativeLayout
android:id="@+id/message_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" &
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
&ImageView
android:id="@+id/message_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/message_unselected" /&
android:id="@+id/message_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="消息"
android:textColor="#82858b"/&
&/LinearLayout&
&/RelativeLayout&
&RelativeLayout
android:id="@+id/contacts_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" &
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
&ImageView
android:id="@+id/contacts_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/contacts_unselected" /&
android:id="@+id/contacts_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="联系人"
android:textColor="#82858b"/&
&/LinearLayout&
&/RelativeLayout&
&RelativeLayout
android:id="@+id/news_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" &
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
&ImageView
android:id="@+id/news_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/news_unselected" /&
android:id="@+id/news_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="动态"
android:textColor="#82858b"/&
&/LinearLayout&
&/RelativeLayout&
&RelativeLayout
android:id="@+id/setting_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" &
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
&ImageView
android:id="@+id/setting_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/setting_unselected" /&
android:id="@+id/setting_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="设置"
android:textColor="#82858b" /&
&/LinearLayout&
&/RelativeLayout&
&/LinearLayout&
&/LinearLayout&
这个主布局文件里面,由两部分组成。第一部分是FrameLayout,里面的内容,可以在后面动态添加。第二部分是FrameLayout下面的LinearLayout,这个LinearLayout就是类似TabHost的布局。这个LinearLayout被分成四份,每一份里面多有一个ImageView和一个TextVIew,分别用来显示图标和文字。
已经分成了四份,那我们现在就分别实现四个Fragment和它们的布局了。新建一个message_xml作为消息界面的布局,加入如下代码:
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" &
&ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/message_selected"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="10dp"
android:text="这是消息界面"
android:textSize="20sp"/&
&/LinearLayout&
&/RelativeLayout&
这个布局比较简单,只是在中间显示一个图标和一些文字。
现在来创建这个布局相对应的Fragment。新建MessageFragment继承Fragment,加入如下代码:
package com.cfy.
import android.app.F
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.ViewG
public class MessageFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View messageLayout = inflater.inflate(R.layout.message_layout, container, false);
return messageL
后面三个是类似的。
新建contacts_xml作为联系人界面的布局,加入如下代码:
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" &
&ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/contacts_selected"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="10dp"
android:text="这是联系人界面"
android:textSize="20sp"/&
&/LinearLayout&
&/RelativeLayout&
再新建ContactsFragment继承Fragment,加入如下代码:
package com.cfy.
import android.app.F
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.ViewG
public class ContactsFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View contactsLayout = inflater.inflate(R.layout.contacts_layout, container, false);
return contactsL
新建news_layout.xml作为动态界面的布局,加入如下代码:
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" &
&ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/news_selected"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="10dp"
android:text="这是动态界面"
android:textSize="20sp"/&
&/LinearLayout&
&/RelativeLayout&
新建NewsFragment继承Fragment,加入如下代码:
package com.cfy.
import android.app.F
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.ViewG
public class NewsFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View newsLayout = inflater.inflate(R.layout.news_layout, container, false);
return newsL
新建setting_layout.xml作为设置界面的布局,加入如下代码:
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" &
&ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/setting_selected"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="10dp"
android:text="这是设置界面"
android:textSize="20sp"/&
&/LinearLayout&
&/RelativeLayout&
新建SettingFragment继承Fragment,加入如下代码:
package com.cfy.
import android.app.F
import android.os.B
import android.view.LayoutI
import android.view.V
import android.view.ViewG
public class SettingFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View settingLayout = inflater.inflate(R.layout.setting_layout, container, false);
return settingL
现在我们已经把四个Fragment都创建好了,以及它们所对应的布局文件。
接下来,我们新建或者打开MainActivity作为主Activity,加入如下代码:
package com.cfy.
import android.os.B
import android.app.A
import android.app.FragmentM
import android.app.FragmentT
import android.graphics.C
import android.view.V
import android.view.View.OnClickL
import android.view.W
import android.widget.ImageV
import android.widget.TextV
* 项目的主Activity,所有的Fragment都嵌入到这里。
* @author cfy
public class MainActivity extends Activity implements OnClickListener {
* 定义消息、联系人、动态、设置的Fragment
private MessageFragment messageF
private ContactsFragment contactsF
private NewsFragment newsF
private SettingFragment settingF
* 定义消息、联系人、动态、设置的fragment的布局
private View messageL
private View contactsL
private View newsL
private View settingL
* 定义消息、联系人、动态、设置的tab的图标
private ImageView messageI
private ImageView contactsI
private ImageView newsI
private ImageView settingI
* 定义消息、联系人、动态、设置的tab的文本
private TextView messageT
private TextView contactsT
private TextView newsT
private TextView settingT
* 对Fragment进行管理
private FragmentManager fragmentM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initViews(); //初始化界面,并设置四个tab的监听
fragmentManager = getFragmentManager();
setTabSelection(0); //第一次启动时开启第0个tab
* 根据传入的index,来设置开启的tab页面
* @param index
* index代表对应的下标,0对应消息,1对应联系人,2对应动态,3对应设置
private void setTabSelection(int index) {
// TODO Auto-generated method stub
//清理之前的所有状态
clearSelection();
//开启一个Fragment事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
//隐藏所有的fragment,防止有多个界面显示在界面上
hideFragments(transaction);
switch(index){
//当点击消息tab时,改变控件的图片和文字颜色
messageImage.setImageResource(R.drawable.message_selected);
messageText.setTextColor(Color.WHITE);
//如果messageFragment为空,则创建一个添加到界面上
if(messageFragment == null){
messageFragment = new MessageFragment();
transaction.add(R.id.content, messageFragment);
//如果messageFragment不为空,则直接将它显示出来
transaction.show(messageFragment);
//当点击联系人tab时,改变控件的图片和文字颜色
contactsImage.setImageResource(R.drawable.contacts_selected);
contactsText.setTextColor(Color.WHITE);
//如果contactsFragment为空,则创建一个添加到界面上
if(contactsFragment == null){
contactsFragment = new ContactsFragment();
transaction.add(R.id.content, contactsFragment);
//如果contactsFragment不为空,则直接将它显示出来
transaction.show(contactsFragment);
//当点击动态tab时,改变控件的图片和文字颜色
newsImage.setImageResource(R.drawable.news_selected);
newsText.setTextColor(Color.WHITE);
//如果newsFragment为空,则创建一个添加到界面上
if(newsFragment == null){
newsFragment = new NewsFragment();
transaction.add(R.id.content, newsFragment);
transaction.show(newsFragment);
//当点击设置tab时,改变控件的图片和文字颜色
settingImage.setImageResource(R.drawable.setting_selected);
settingText.setTextColor(Color.WHITE);
//如果settingFragment为空,则创建一个添加到界面上
if(settingFragment == null){
settingFragment = new SettingFragment();
transaction.add(R.id.content, settingFragment);
transaction.show(settingFragment);
* 隐藏所有的fragment
* @param transaction
用于对fragment进行操作的事务
private void hideFragments(FragmentTransaction transaction) {
// TODO Auto-generated method stub
if(messageFragment != null){
transaction.hide(messageFragment);
if(contactsFragment != null){
transaction.hide(contactsFragment);
if(newsFragment != null){
transaction.hide(newsFragment);
if(settingFragment != null){
transaction.hide(settingFragment);
* 清理之前的所有状态
private void clearSelection() {
// TODO Auto-generated method stub
messageImage.setImageResource(R.drawable.message_unselected);
messageText.setTextColor(Color.parseColor("#82858b"));
contactsImage.setImageResource(R.drawable.contacts_unselected);
contactsText.setTextColor(Color.parseColor("#82858b"));
newsImage.setImageResource(R.drawable.news_unselected);
newsText.setTextColor(Color.parseColor("#82858b"));
settingImage.setImageResource(R.drawable.setting_unselected);
settingText.setTextColor(Color.parseColor("#82858b"));
* 初始化界面,并设置四个tab的监听
private void initViews() {
// TODO Auto-generated method stub
messageLayout = findViewById(R.id.message_layout);
contactsLayout = findViewById(R.id.contacts_layout);
newsLayout = findViewById(R.id.news_layout);
settingLayout = findViewById(R.id.setting_layout);
messageImage = (ImageView) findViewById(R.id.message_image);
contactsImage = (ImageView) findViewById(R.id.contacts_image);
newsImage = (ImageView) findViewById(R.id.news_image);
settingImage = (ImageView) findViewById(R.id.setting_image);
messageText = (TextView) findViewById(R.id.message_text);
contactsText = (TextView) findViewById(R.id.contacts_text);
newsText = (TextView) findViewById(R.id.news_text);
settingText = (TextView) findViewById(R.id.setting_text);
messageLayout.setOnClickListener(this);
contactsLayout.setOnClickListener(this);
newsLayout.setOnClickListener(this);
settingLayout.setOnClickListener(this);
* 点击四个tab时的监听
* @param v
四个控件的view
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.message_layout:
//点击消息tab,选中第一个tab
setTabSelection(0);
case R.id.contacts_layout:
//点击联系人tab,选中第二个tab
setTabSelection(1);
case R.id.news_layout:
//点击动态tab,选中第三个tab
setTabSelection(2);
case R.id.setting_layout:
//点击设置tab,选中第四个tab
setTabSelection(3);
代码已经注释得很详细了,到此为主,程序已经写完了。
现在,我们已经使用Fragment编写出和TabHost一样的效果了。每个界面的具体逻辑就可以写在相应的Fragment中了,效果跟写在Activity中类似。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 支付宝职业信息怎么写 的文章

 

随机推荐