当前位置: 代码迷 >> Android >> Android之怎么实现滑动页面切换【Fragment】
  详细解决方案

Android之怎么实现滑动页面切换【Fragment】

热度:365   发布时间:2016-04-27 23:20:39.0
Android之如何实现滑动页面切换【Fragment】


Fragment 页面切换不能滑动 所以对于listview 可以添加的左右滑动事件 ,不会有冲突例如(QQ的好友列表的删除) 

Fragment 和viewpager 的区别 
Viewpager 的事件都需要写在 MainActivity 使得 MainActivity 类非常冗余 
Fragment 内部的事件则可以由其内部去处理分成多个类。便于维护和管理 MainActivity 只起到一个调度的作用 
这里先用Fragment实现非滑动页面切换,了解原理后我会在另一篇文章使用Fragment+viewPager加上滑动效果



第一步:创建Android工程FragmentPage
这时会自动生成一个MainActivity.java
和一个对应的activity_main.xml文件
在layout文件夹下创建四个xml文件:


tab1.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/imag1"    android:orientation="vertical" ></LinearLayout>



tab2.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/image2"    android:orientation="vertical" ></LinearLayout>





tab3.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/image3"    android:orientation="vertical" ></LinearLayout>




bottom.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="45dp"    android:orientation="horizontal" >    <TextView        android:id="@+id/text1"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="1.0"        android:gravity="center"        android:text="标题1"        android:textColor="#000000"        android:textSize="18.0dip" />    <TextView        android:id="@+id/text2"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="1.0"        android:gravity="center"        android:text="标题2"        android:textColor="#000000"        android:textSize="18.0dip" />    <TextView        android:id="@+id/text3"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="1.0"        android:gravity="center"        android:text="标题3"        android:textColor="#000000"        android:textSize="18.0dip" /></LinearLayout>



在src下的自动生成的包下创建三个java文件:


Fragment1
注意:导入包时一定要导入:import android.support.v4.app.FragmentActivity;


这个包。这是Android4.0之后才支持的版本
4.0之前不支持这个包(有另外一个专门的包)



package com.example.fragmentpage;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment1 extends Fragment {	private View tab1view;	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		// TODO Auto-generated method stub		tab1view=inflater.inflate(R.layout.tab1, container, false);			return tab1view;	}}







Fragment2


package com.example.fragmentpage;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment2 extends Fragment {	private View tabview1;	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		// TODO Auto-generated method stub		tabview1 = inflater.inflate(R.layout.tab2, container,false);		return tabview1;	}}






Fragment3




package com.example.fragmentpage;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment3 extends Fragment{	private View tab3view ;	@Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,			Bundle savedInstanceState) {		// TODO Auto-generated method stub		tab3view = inflater.inflate(R.layout.tab3, container, false);		return tab3view;	}}


第四步:


在MainActivity中写入


package com.example.fragmentpage;import android.os.Bundle;import android.app.Activity;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.text.method.HideReturnsTransformationMethod;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.TextView;public class MainActivity extends FragmentActivity implements OnClickListener{	private TextView t1;	private TextView t2;	private TextView t3;	private Fragment tab1;	private Fragment tab2;	private Fragment tab3;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		requestWindowFeature(Window.FEATURE_NO_TITLE);		setContentView(R.layout.activity_main);		initView();//根据Id索引组件		initEvent();//添加监听		setSelect(0);//	}	private void initEvent() {		t1.setOnClickListener(this);		t2.setOnClickListener(this);		t3.setOnClickListener(this);	}	private void initView() {		t1 = (TextView) findViewById(R.id.text1);		t2 = (TextView) findViewById(R.id.text2);		t3 = (TextView) findViewById(R.id.text3);	}/* * 重置textView的内容 * */	private void reset() {		t1.setText("标题1");		t2.setText("标题2");		t3.setText("标题3");	}	private void setSelect(int i) {		// TODO Auto-generated method stub		FragmentManager fm=getSupportFragmentManager();		FragmentTransaction trs = fm.beginTransaction();		//隐藏Fragment		hideFragment(trs);//使全部隐藏		switch(i){		case 0:			if(tab1 == null){				tab1 = new Fragment1();//创建Fragment1的对象(一个页面)				trs.add(R.id.id_content,tab1);			}			else {				trs.show(tab1);//使当前Activity显示tab1即Fragment1页面			}			t1.setText("选中");			break;		case 1:			if(tab2 == null){				tab2 = new Fragment2();				trs.add(R.id.id_content, tab2);			}else{				trs.show(tab2);			}			t2.setText("选中");			break;		case 2:			if(tab3 == null){				tab3 = new Fragment3();				trs.add(R.id.id_content, tab3);			}else {				trs.show(tab3);			}			t3.setText("选中");			break;		default:			break;		}		trs.commit();	}	@Override	public void onClick(View v) {//监听事件		// TODO Auto-generated method stub		reset();		switch(v.getId()){		case R.id.text1:			setSelect(0);			break;		case R.id.text2:			setSelect(1);			break;		case R.id.text3:			setSelect(2);			break;		default:			break;		}	}	private void hideFragment(FragmentTransaction trs) {		// TODO Auto-generated method stub		if(tab1!=null){			trs.hide(tab1);		}		if(tab2!=null)		{			trs.hide(tab2);		}		if(tab3!=null)		{			trs.hide(tab3);		}	}}








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

  相关解决方案