Fragment使用—侧边栏

原创 2013年12月02日 15:43:11

       话不多说直接看效果图和代码吧。

一、实现的效果图

二、工程结构目录

三、具体编码的实现

MainActivity的布局文件:activity_main.xml

其实很简单,左边四个按钮,右边部分用一个FrameLayout布局先把位置给占着,放Fragment

<LinearLayout 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:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/maintab_toolbar_bg"
        android:orientation="vertical"
        android:gravity="center_horizontal" >

        <LinearLayout
            android:id="@+id/ll_home"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_selector"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/image_home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/home_btn_selector" />

            <TextView
                android:id="@+id/text_home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="首页"
                android:textColor="@android:color/white" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_friends"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_selector"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/image_friends"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/friends_btn_selector" />

            <TextView
                android:id="@+id/text_friends"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="好友"
                android:textColor="@android:color/white" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_selector"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/image_message"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/message_btn_selector" />

            <TextView
                android:id="@+id/text_message"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="信息"
                android:textColor="@android:color/white" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_more"
             android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_selector"
            android:gravity="center"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/image_more"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/more_btn_selector" />

            <TextView
                android:id="@+id/text_more"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="更多"
                android:textColor="@android:color/white" />
        </LinearLayout>
    </LinearLayout>
    <FrameLayout
        android:id="@+id/fl_content"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </FrameLayout>
    
</LinearLayout>



 Fragment的布局文件:fragment_1.xml

这是其中一个,其他的我就不贴出来了,都一样的,就一个背景。

<?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:background="@drawable/home_bg">

    
</LinearLayout>

 

现在我们来主要来看一下主页面的代码,这里添加Fragment的时候一定要注意,必须要用add()方法添加,这样才能保存数据;

如果用replace()替换的话,当第二次打开时数据将不会被保存。


MainActivity.java

package com.hua.fragmentdemo;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends FragmentActivity implements OnClickListener{
	private LinearLayout ll_home;
	private LinearLayout ll_friends;
	private LinearLayout ll_message;
	private LinearLayout ll_more;
	private ImageView image_home;
	private ImageView image_friends;
	private ImageView image_message;
	private ImageView image_more;
	//Fragment管理器
	private FragmentManager fm = this.getSupportFragmentManager();
	private FragmentTransaction ft;
	private FragmentPage1 fragmentPage1;
	private FragmentPage2 fragmentPage2;
	private FragmentPage3 fragmentPage3;
	private FragmentPage4 fragmentPage4;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initView();
		//开始事务(每次改变Fragment管理器之后都要提交)
		ft = fm.beginTransaction();
		home();
		//提交事务
		ft.commit();
	}

	private void initView(){
		ll_home = (LinearLayout)findViewById(R.id.ll_home);
		ll_friends = (LinearLayout)findViewById(R.id.ll_friends);
		ll_message = (LinearLayout)findViewById(R.id.ll_message);
		ll_more = (LinearLayout)findViewById(R.id.ll_more);
		
		image_home = (ImageView)findViewById(R.id.image_home);
		image_friends = (ImageView)findViewById(R.id.image_friends);
		image_message = (ImageView)findViewById(R.id.image_message);
		image_more = (ImageView)findViewById(R.id.image_more);
		
		ll_home.setOnClickListener(this);
		ll_friends.setOnClickListener(this);
		ll_message.setOnClickListener(this);
		ll_more.setOnClickListener(this);
		ll_home.setSelected(true);
		image_home.setSelected(true);
		
	}
	
	@Override
	public void onClick(View v) {
		//每次点击时都需要重新开始事务
		ft = fm.beginTransaction();
		//把显示的Fragment隐藏
		setSelected();
		switch (v.getId()) {
		case R.id.ll_home:
			ll_home.setSelected(true);
			image_home.setSelected(true);
			home();
			break;
		case R.id.ll_friends:
			ll_friends.setSelected(true);
			image_friends.setSelected(true);
			friend();
			
			break;
		case R.id.ll_message:
			ll_message.setSelected(true);
			image_message.setSelected(true);
			message();
			break;
		case R.id.ll_more:
			ll_more.setSelected(true);
			image_more.setSelected(true);
			more();
			break;
		}
		ft.commit();
		
	}
	
	private void setSelected(){
		ll_home.setSelected(false);
		ll_friends.setSelected(false);
		ll_message.setSelected(false);
		ll_more.setSelected(false);
		image_home.setSelected(false);
		image_friends.setSelected(false);
		image_message.setSelected(false);
		image_more.setSelected(false);
		if(fragmentPage1 != null){
			//隐藏Fragment
			ft.hide(fragmentPage1);
		}
		if(fragmentPage2 != null){
			ft.hide(fragmentPage2);
		}
		if(fragmentPage3 != null){
			ft.hide(fragmentPage3);
		}
		if(fragmentPage4 != null){
			ft.hide(fragmentPage4);
		}
	}

	private void home(){
		if(fragmentPage1 == null){
			fragmentPage1 = new FragmentPage1();
			/*添加到Fragment管理器中
			这里如果用replace,
			当每次调用时都会把前一个Fragment给干掉,
			这样就导致了每一次都要创建、销毁,
			数据就很难保存,用add就不存在这样的问题了,
			当Fragment存在时候就让它显示,不存在时就创建,
			这样的话数据就不需要自己保存了,
			因为第一次创建的时候就已经保存了,
			只要不销毁一直都将存在*/
			ft.add(R.id.fl_content, fragmentPage1);
		}else{
			//显示Fragment
			ft.show(fragmentPage1);
		}
	}
	private void friend(){
		if(fragmentPage2 == null){
			fragmentPage2 = new FragmentPage2();
			ft.add(R.id.fl_content, fragmentPage2);
		}else{
			ft.show(fragmentPage2);
		}
		
	}
	private void message(){
		if(fragmentPage3 == null){
			fragmentPage3 = new FragmentPage3();
			ft.add(R.id.fl_content, fragmentPage3);
		}else{
			ft.show(fragmentPage3);
		}
		
	}
	private void more(){
		if(fragmentPage4 == null){
			fragmentPage4 = new FragmentPage4();
			ft.add(R.id.fl_content, fragmentPage4);
		}else{
			ft.show(fragmentPage4);
		}
		
	}
}


Fragment的代码,这里我把它的生命周期里的方法打印了一下,方便看到Fragment在什么时候创建、什么时候销毁。用add()和用replace()时候生命周期的变化。

其实我感觉吧,这里面我一般只用这几个方法onCreateView(),onActivityCreated(),onAttach(),其它我都没有用过。

FragmentPage1.java

package com.hua.fragmentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FragmentPage1 extends Fragment{

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		Log.i("TAG", "---onCreateView");
		return inflater.inflate(R.layout.fragment_1, null);		
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		Log.i("TAG", "---onActivityCreated");
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
	}

	@Override
	public void onAttach(Activity activity) {
		Log.i("TAG", "---onAttach");
		// TODO Auto-generated method stub
		super.onAttach(activity);
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		Log.i("TAG", "---onCreate");
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}

	@Override
	public void onDestroy() {
		Log.i("TAG", "---onDestroy");
		// TODO Auto-generated method stub
		super.onDestroy();
	}

	@Override
	public void onPause() {
		Log.i("TAG", "---onPause");
		// TODO Auto-generated method stub
		super.onPause();
	}

	@Override
	public void onResume() {
		Log.i("TAG", "---onResume");
		// TODO Auto-generated method stub
		super.onResume();
	}
}

 

文章到这就完了,如果你看过上一篇文章,你会发现代码几乎是一样的,就布局文件改变了一下而已,同时欢迎大家提出宝贵意见共同探讨

 

源码下载地址

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Fragment使用—侧边栏

  • 2013-12-02 15:16
  • 7.14MB
  • 下载

带侧边栏的Fragment

这节课学习的是创建带侧边栏的Fragment 新建一个Navigation Drawer 的Activity,命名为SliderActivity 会自动创建很多文件,其中包括一个主布局文件:fra...

Android学习笔记(四)之碎片化Fragment实现仿人人客户端的侧边栏

其实一种好的UI布局,可以使用户感到更加的亲切与方便。最近非常流行的莫过于侧边栏了,其实我也做过很多侧边栏的应用,但是那些侧边栏的使用我都不是很满意,现在重新整理,重新写了一个相对来说我比较满意的侧边...

Android关于侧边栏的简单使用(drawerLayout,navigationview,动态添加menu)

目前市面上大部分app都有使用侧边栏,假如的app还没有该功能,该让你的产品经理加班了哦。。 一、侧边栏一般包括header和menu,header一般包括背景图、用户名等一些东东,切图如下 下面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)