您的位置:首页 > 移动开发 > Android开发

Fragment实现TabHost标签切换功能

2014-05-28 11:10 330 查看
首先定义四个布局文件分别表示切换的四个界面

fragment1.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:orientation="vertical"
android:padding="10dp" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是第一个fragment" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="得到第四个Fragment中EditText的值" />

</LinearLayout>

fragment2.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:orientation="vertical"
android:padding="10dp" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是第二个fragment" />

<DatePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>
fragment3.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:orientation="vertical"
android:padding="10dp" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是第三个fragment" />

<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>
fragment4.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:orientation="vertical"
android:padding="10dp" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是第四个fragment" />

<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
定义一个主布局文件来装纳四个切换的界面

activity_main.xml

<RelativeLayout 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"
tools:context=".MainActivity" >

<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:orientation="horizontal" >

<Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="A" />

<Button
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="B" />

<Button
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="C" />

<Button
android:id="@+id/btn4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="D" />
</LinearLayout>

<FrameLayout
android:id="@+id/framelayout"
android:layout_below="@id/linearlayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>

</RelativeLayout>

创建四个类Fragment1,Fragment2,Fragment3,Fragment4,
分别表示四个界面的操作类。

Fragment2 ,Fragment3和Fragment4只是简单的返回其对应的布局文件视图,这里不做介绍。

Fragment2.java

package com.example.myfragment;

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 {

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment2, null);
return view;
}

@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}

}


Fragment3.java
package com.example.myfragment;

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 {

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment3, null);
return view;
}

@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}

}


Fragment4.java
package com.example.myfragment;

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

public class Fragment4 extends Fragment {

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment4, null);
return view;
}

@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}

}


Fragment1主要是获取Fragment4里EditText的值并显示出来。
通过getFragmentManager().findFragmentByTag("fragment4");取得fragment4对象,

并通过fragment4.getView().findViewById(R.id.editText1);获得EditText控件,显示里面的值。

Fragment1.java

package com.example.myfragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Fragment1 extends Fragment {

private Button button;

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment1, null);
button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//得到fragment4对象
Fragment4 fragment4 = (Fragment4) getFragmentManager().findFragmentByTag("fragment4");
//取得fragment4中的editText控件,并得到里面的值
EditText editText = (EditText) fragment4.getView().findViewById(R.id.editText1);
Toast.makeText(getActivity(), "第四个Fragment中EditText的值为:\n"+editText.getText(),
Toast.LENGTH_LONG).show();
}
});
return view;
}

@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}

}


主界面实现类
MainActivity.java

package com.example.myfragment;

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.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends FragmentActivity implements OnClickListener {

private Button btn1;//标签按钮1
private Button btn2;//标签按钮2
private Button btn3;//标签按钮3
private Button btn4;//标签按钮4
private FragmentManager manager;
private FragmentTransaction transaction;
private Fragment1 fragment1;//页面1
private Fragment2 fragment2;//页面2
private Fragment3 fragment3;//页面3
private Fragment4 fragment4;//页面4

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过manager得到transaction对象
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
//创建四个Fragment对象并将其添加到transaction中
fragment1 = new Fragment1();
//第一个参数表示要添加到某个布局上(id)
//第二个参数表示要添加的Fragment
//第三个设置标签
transaction.add(R.id.framelayout, fragment1, "fragment1");
//默认显示第一个页面,其他的都隐藏起来
fragment2 = new Fragment2();
transaction.add(R.id.framelayout, fragment2, "fragment2").hide(fragment2);
fragment3 = new Fragment3();
transaction.add(R.id.framelayout, fragment3, "fragment3").hide(fragment3);
fragment4 = new Fragment4();
transaction.add(R.id.framelayout, fragment4, "fragment4").hide(fragment4);
//提交
transaction.commit();
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
btn4 = (Button) findViewById(R.id.btn4);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//将全部Fragment页面都隐藏起来
transaction = manager.beginTransaction();
transaction.hide(fragment1).hide(fragment2).hide(fragment3).hide(fragment4);
//然后显示你所点击的那个按钮所对应的Fragment
switch (v.getId()) {
case R.id.btn1:
transaction.show(fragment1);
break;
case R.id.btn2:
transaction.show(fragment2);
break;
case R.id.btn3:
transaction.show(fragment3);
break;
case R.id.btn4:
transaction.show(fragment4);
break;
}
//提交
transaction.commit();
}

}


MyFragmentTab截图



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐