ActionBar + Fragment 实现两个碎片的切换

开始自定义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 实现两个碎片的切换 。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值