开始自定义ActionBar然后创建以个活动继承FragmentActivity,再引用ActionBar。在ActionBar中创建两个碎片,这样就可以实现两碎片间的切换。
先做好ActionBar的布局:
<?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="50dp"
android:background="@drawable/current_header_bg"
android:minHeight="50dp" >
<LinearLayout
android:id="@+id/layout_left"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_gravity="left"
android:gravity="center"
android:minWidth="50dp"
android:orientation="horizontal"
android:visibility="invisible" />
<LinearLayout
android:id="@+id/layout_mid"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal"
android:visibility="invisible" />
<LinearLayout
android:id="@+id/layout_right"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:gravity="center"
android:minWidth="50dp"
android:orientation="horizontal"
android:visibility="invisible" >
</LinearLayout>
</LinearLayout>
自定义ActionBar 代码如下:
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import cmcc.gz.zhxq.R;
public class TitleBar {
public static int textSize = 20;
public final static int leftId = 0X0000;
public final static int titleId = 0X0001;
public final static int rightId = 0X0002;
@SuppressWarnings("unused")
private static int leftResId = 0;
@SuppressWarnings("unused")
private static String rightResId ;
public static float margin_left_size = 10;
public static float margin_right_size = 10;
//ActionBar左边布局的初始化
public static LinearLayout getTitleLayoutLeft(Activity context) {
LinearLayout left = (LinearLayout) context
.findViewById(R.id.layout_left);
left.setVisibility(View.VISIBLE);
return left;
}
//ActionBar右边布局的初始化
public static LinearLayout getTitleLayoutRight(Activity context) {
LinearLayout right = (LinearLayout) context
.findViewById(R.id.layout_right);
right.setVisibility(View.VISIBLE);
return right;
}
//ActionBar中间布局的初始化
public static LinearLayout getTitleLayoutMid(Activity context) {
LinearLayout mid = (LinearLayout) context.findViewById(R.id.layout_mid);
mid.setVisibility(View.VISIBLE);
return mid;
}
/**
* 向布局文件中间中添加控件
*/
public static void addSwitcherBtnToTitleBar(Activity context,
OnCheckedChangeListener listener, String leftText, String rightText) {
LayoutInflater inflater = context.getLayoutInflater();
View child = inflater.inflate(R.layout.common_titlebar_switcher, null);
RadioGroup group = (RadioGroup) child
.findViewById(R.id.titlebar_switch_group);
group.setOnCheckedChangeListener(listener);
RadioButton left = (RadioButton) group
.findViewById(R.id.titlebar_switch_left);
left.setText(leftText);
RadioButton right = (RadioButton) group
.findViewById(R.id.titlebar_switch_right);
right.setText(rightText);
TitleBar.getTitleLayoutMid(context).addView(child);
}
/**
* 设置控件监听
*/
@SuppressWarnings("deprecation")
public static void addLeftImgSwitcherBtnToTitleBar(Activity context,
OnCheckedChangeListener listener, String leftText,
String rightText, int leftResId, OnClickListener leftClickListener,String rightResId, OnClickListener rightClickListener) {
addSwitcherBtnToTitleBar(context, listener, leftText, rightText);
TitleBar.leftResId = leftResId;
//设置ActionBar左边布局为ImageButton
ImageButton left = new ImageButton(context);
TitleBar.rightResId = rightResId;
//设置ActionBar右边布局为TextView
TextView right = new TextView(context);
//设置线性布局中的属性
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins((int) margin_right_size,0,(int)margin_right_size, 0);
left.setLayoutParams(lp);
//图片设为空
left.setBackgroundDrawable(null);
left.setImageResource(leftResId);
//设置点击事件
left.setOnClickListener(leftClickListener);
//把上面的设置添加到ActionBar左边布局中
TitleBar.getTitleLayoutLeft(context).addView(left);
right.setLayoutParams(lp);
right.setText(rightResId);
//设置字体的大少
right.setTextSize(16);
//设置字体的颜色
right.setTextColor(0xffffffff);
//设置点击事件
right.setOnClickListener(rightClickListener);
//把上面的设置添加到ActionBar右边布局中
TitleBar.getTitleLayoutRight(context).addView(right);
}
}
创建活动继承FragmentActivity
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import cmcc.gz.zhxq.R;
import cmcc.gz.zhxq.common.fgOptionImpl;
import cmcc.gz.zhxq.user.until.TitleBar;
public class UserForumReplyListActivity extends FragmentActivity {
//碎片一
MyReplyActivity replyActivity;
//碎片二
MyReceiveActivity receiveActivity;
//碎片容器用来切换碎片
fgOptionImpl fgImpl;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.neighbour_activity);
InitView();
InitData();
}
private void InitView(){
//自定义ActionBar
TitleBar.addLeftImgSwitcherBtnToTitleBar(this, new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
//当点击R.id.titlebar_switch_left
if(checkedId==R.id.titlebar_switch_left){
//显示receiveActivity碎片
fgImpl.show(receiveActivity);
//隐藏replyActivity碎片
fgImpl.hide(replyActivity);
}
else{
//显示replyActivity碎片
fgImpl.show(replyActivity);
//隐藏receiveActivity碎片
fgImpl.hide(receiveActivity);
}
}
}, "我收到","我回复",R.drawable.common_return_button
, new OnClickListener() {
//左按钮的点击事件
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
UserForumReplyListActivity.this.finish();
}
}, null, null);
}
private void InitData(){
//实例化fgOptionImpl
fgImpl=new fgOptionImpl(this, R.id.ljhy_fg_container);
//实例化碎片receiveActivity
receiveActivity =new MyReceiveActivity();
//实例化碎片replyActivity
replyActivity=new MyReplyActivity();
//把碎片添加到fgOptionImpl容器中
fgImpl.addToContainer(receiveActivity);
fgImpl.addToContainer(replyActivity);
//默认显示碎片
((RadioButton)findViewById(R.id.titlebar_switch_left)).setChecked(true);
fgImpl.show(receiveActivity);
}
}
UserForumReplyListActivity活动的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:orientation="vertical" >
<include layout="@layout/common_title" />
<FrameLayout
android:id="@+id/ljhy_fg_container"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#ffffff" />
</LinearLayout>
碎片容器fgOptionImpl接口:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
public class fgOptionImpl implements fragmentOption {
int container;
FragmentActivity mContext;
public fgOptionImpl(FragmentActivity context,int containerID) {
// TODO Auto-generated constructor stub
this.mContext=context;
this.container=containerID;
}
@Override
public void addToContainer(Fragment fg) {
// TODO Auto-generated method stub
FragmentTransaction ft = mContext.getSupportFragmentManager().beginTransaction();
if (mContext.getSupportFragmentManager().findFragmentById(container) == null) {
}
ft.add(container, fg);
ft.commit();
}
@Override
public void hide(Fragment fg) {
// TODO Auto-generated method stub
FragmentTransaction ft = mContext.getSupportFragmentManager().beginTransaction();
ft.hide(fg);
ft.commit();
}
@Override
public void show(Fragment fg) {
// TODO Auto-generated method stub
FragmentTransaction ft = mContext.getSupportFragmentManager().beginTransaction();
ft.show(fg);
ft.commit();
}
}
碎片一:
//继承了BaseFragment
public class MyReceiveActivity extends BaseFragment{
private PullToRefreshListView listView;
private List<MyReceiveInfo> receiveInfos = new ArrayList<MyReceiveInfo>();
private UserForumReplyListActivity u = new UserForumReplyListActivity();
private MyReceiveAdapter adapter;
//重写了initView
@Override
public View initView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_receive_activity, null);
}
//重写了initData
@Override
public void initData() {
listView = (PullToRefreshListView) getActivity().findViewById(R.id.my_receive_listview);
MyReplyInfo replyInfo = new MyReplyInfo();
replyInfo.setMrContent("快来看美女啊");
replyInfo.setMrTime("2014-8-18-17:17");
replyInfo.setMrTitle("这里有美女");
replyInfo.setMrImg("http://f.hiphotos.baidu.com/image/pic/item/03087bf40ad162d9371f091c13dfa9ec8a13cd39.jpg");
replyInfo.setMrName("小惠");
MyReplyInfo replyInfo1 = new MyReplyInfo();
replyInfo1.setMrContent("好吃店开张了");
replyInfo1.setMrTime("2014-8-18-17:17");
replyInfo1.setMrTitle("有什么好吃的");
replyInfo1.setMrImg("http://f.hiphotos.baidu.com/image/pic/item/03087bf40ad162d9371f091c13dfa9ec8a13cd39.jpg");
replyInfo1.setMrName("小明");
receiveInfos.add(replyInfo);
receiveInfos.add(replyInfo1);
adapter = new MyReceiveAdapter(receiveInfos);
listView.setAdapter(adapter);
}
//重写了initEvent
@Override
public void initEvent() {
listView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(
PullToRefreshBase<ListView> refreshView) {
new AddDataTask().execute();
}
@Override
public void onPullUpToRefresh(
PullToRefreshBase<ListView> refreshView) {
new AppendDataTask().execute();
}
});
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
}
});
ListView FnListView = listView.getRefreshableView();
registerForContextMenu(FnListView);
}
private class AddDataTask extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(String[] result) {
}
}
private class AppendDataTask extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(String[] result) {
}
}
private class MyReceiveAdapter extends BaseAdapter{
LayoutInflater inflater;
List<MyReceiveInfo> data = null;
public MyReceiveAdapter(List<MyReceiveInfo> data) {
super();
this.data = data;
inflater = LayoutInflater.from(getActivity());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data == null ? 0 : data.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyReceiveViewHold holder;
MyReceiveInfo info;
if (convertView == null) {
convertView = inflater.inflate(
R.layout.my_receive_listview_item, null);
holder = new MyReceiveViewHold(convertView);
holder.r_name = (TextView) convertView
.findViewById(R.id.my_receive_name);
holder.r_time = (TextView) convertView
.findViewById(R.id.my_receive_time);
holder.r_title = (TextView) convertView
.findViewById(R.id.my_receive_title);
holder.r_content = (TextView) convertView
.findViewById(R.id.my_receive_content);
holder.r_img = (ImageView) convertView
.findViewById(R.id.my_receive_head);
convertView.setTag(holder);
} else {
holder = (MyReceiveViewHold) convertView.getTag();
}
info = this.data.get(position);
holder.r_name.setText(info.getrName());
String time = DateUtility.getDiffNum(info.getrTime());
holder.r_time.setText(time);
holder.r_title.setText(info.getrTitle());
holder.r_content.setText(info.getrContent());
if (info.getrImg() == null) {
holder.r_img.setImageResource(R.drawable.user_default_pic);
} else {
//第三方类库,处理图片
Picasso.with(context).load(info.getNrImg()).into(holder.nr_img);
}
return convertView;
}
class MyReceiveViewHold {
TextView r_name, r_time, r_title, r_content;
ImageView r_img;
@SuppressWarnings("unused")
View baseView;
MyReceiveViewHold(View baseView) {
this.baseView = baseView;
}
}
}
}
碎片一的数据存储类:
public class MyReplyInfo {
private String mrImg;
private String mrName;
private String mrTime;
private String mrContent;
private String mrTitle;
public String getMrImg() {
return mrImg;
}
public void setMrImg(String mrImg) {
this.mrImg = mrImg;
}
public String getMrName() {
return mrName;
}
public void setMrName(String mrName) {
this.mrName = mrName;
}
public String getMrTime() {
return mrTime;
}
public void setMrTime(String mrTime) {
this.mrTime = mrTime;
}
public String getMrContent() {
return mrContent;
}
public void setMrContent(String mrContent) {
this.mrContent = mrContent;
}
public String getMrTitle() {
return mrTitle;
}
public void setMrTitle(String mrTitle) {
this.mrTitle = mrTitle;
}
}
碎片一的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:orientation="vertical" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<cmcc.gz.lib.controls.pulltorefresh.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_reply_listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:divider="@color/transparent"
android:dividerHeight="5dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:padding="3dp"
android:smoothScrollbar="true"
ptr:ptrMode="both" />
</FrameLayout>
</LinearLayout>
碎片一的适配器布局文件:
<?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:layout_gravity="center"
android:background="@drawable/listview_item_selector"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp" >
<ImageView
android:id="@+id/my_reply_head"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="centerCrop"
android:src="@drawable/user_default_pic" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:orientation="vertical" >
<TextView
android:id="@+id/my_reply_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="吃饭睡觉打豆豆"
android:textColor="@color/font_blue"
android:textSize="@dimen/tv_size_larger" />
<TextView
android:id="@+id/my_reply_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="4dp"
android:text="在那里啊"
android:textColor="@color/color_gray_dark"
android:textSize="@dimen/tv_size_large" />
<TextView
android:id="@+id/my_reply_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginTop="4dp"
android:text="2014-7-24 8:00"
android:textColor="@color/color_gray"
android:textSize="@dimen/tv_size_larger" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/my_reply_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:text="大家快来看美女"
android:textColor="@color/color_gray"
android:textSize="@dimen/tv_size_large" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginBottom="5dp"
android:background="@drawable/current_xline" />
</LinearLayout>
</LinearLayout>
BaseFragment碎片类:
import cmcc.gz.lib.controls.MyProgressDialog;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public abstract class BaseFragment extends Fragment {
protected View view;
public MyProgressDialog progressDialog;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
startInit();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
view = initView(inflater, container, savedInstanceState);
return view;
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
private void startInit() {
initData();
initEvent();
}
public abstract View initView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState);
public abstract void initData();
public abstract void initEvent();
}
碎片二和碎片一是一样的。这样就完成了ActionBar + Fragment 实现两个碎片的切换 。