Android使用帧布局(FrameLayout)来动态加载碎片(fragment)

1、在activity_main.xml布局上添加帧布局FrameLayout

<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="vertical"
    tools:context=".MainActivity" >
	<fragment
	    android:id="@+id/top" 
	    android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name="com.t20.fragment.TopFragment"
	    /> 
	 <!-- 使用帧布局来放要被替换的fragment-->
	 <FrameLayout 
	    android:id="@+id/frame" 
	    android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
	     >     
	 </FrameLayout>
</LinearLayout>

2、MainActivity.java

package com.t20;

import com.t20.fragment.Frag1Fragment;
import com.t20.fragment.Frag2Fragment;
import com.t20.fragment.Frag3Fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class MainActivity extends FragmentActivity {
	//自定义的tag标签	
	public static String TAG1="frag1";
	public static String TAG2="frag2";
	public static String TAG3="frag3";
	//Fragmemt的类
	public Fragment f1=new Frag1Fragment();
	public Fragment f2=new Frag2Fragment();
	public Fragment f3=new Frag3Fragment();	
	
	/**
	 * 切换帧布局中的Fragmemt
	 * @param fragment
	 * @param tag
	 */

	public void changeFragmemt(Fragment fragment,String tag){
			//1、获取辅助碎片管理器
			FragmentManager fm= getSupportFragmentManager();
			//2、开启事务
			FragmentTransaction ft= fm.beginTransaction();
			if(tag.equals(TAG1)){
				ft.show(f1);
				ft.hide(f2);
				ft.hide(f3);
			}else if(tag.equals(TAG2)){
				ft.show(f2);
				ft.hide(f1);
				ft.hide(f3);
			}else{
				ft.show(f3);
				ft.hide(f1);
				ft.hide(f2);
			}		
			//4、提交事务
			ft.commit();		
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_msg_info);				
		/**
		 * 初始化帧布局的内容
		 */
		//1、获取辅助碎片管理器
		FragmentManager fm= getSupportFragmentManager();
		//2、开启事务
		FragmentTransaction ft= fm.beginTransaction();
		//3、添加Fragment
		ft.add(R.id.frame, f1, TAG1);
		ft.add(R.id.frame, f2, TAG2);
		ft.add(R.id.frame, f3, TAG3);
		//---------帧布局框架id--Fragment碎片---自定义tag标签			
		//4、提交事务
		ft.commit();			
	
	}

}

3、TopFragment.java

package com.t20t.fragment;

import com.t20t.MainActivity;
import com.t20t.R;
import com.t20t.util.CircleImageView;

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

public class TopFragment extends Fragment implements OnClickListener{
	
	private ImageView ivHeadPic;//头像
	private TextView tvNick;//昵称
	private TextView tvMsg;//消息
	private EditText inputContent;//回复内容
	private Button btn1,btn2,btn3;//按钮
	
	/**
	 * 设置信息
	 * @param imageId 
	 * @param nick
	 * @param msg
	 */
	public void setInfo(int imageId,String nick,String msg){
		ivHeadPic.setImageResource(imageId);
		tvNick.setText(nick);
		tvMsg.setText(msg);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		//加载头部布局(top.xml)
		View v=inflater.inflate(R.layout.top, container, false);
		//获取布局上的控件					
		ivHeadPic=(ImageView) v.findViewById(R.id.topHeadPic);	
		tvNick=(TextView) v.findViewById(R.id.topNick);
		tvMsg=(TextView) v.findViewById(R.id.topMsg);
		inputContent=(EditText) v.findViewById(R.id.inputContent);
		btn1=(Button) v.findViewById(R.id.button1);
		btn2=(Button) v.findViewById(R.id.button2);
		btn3=(Button) v.findViewById(R.id.button3);
		
		//监听事件
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
		btn3.setOnClickListener(this);
		
		return v;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		//获取内容 
		String content=inputContent.getText().toString();
		if(content.isEmpty()){
			Toast.makeText(getActivity(),"请输入回复内容", Toast.LENGTH_SHORT).show();
			return;
		}
		//1、获取Activity活动
		MainActivity activity= (MainActivity) getActivity();
		//2、获取辅助碎片管理器
		FragmentManager fm= activity.getSupportFragmentManager();
		
		switch (v.getId()) {
		case R.id.button1:	
			//切换帧布局中的Fragment
			activity.changeFragmemt(activity.f1, activity.TAG1);
			//通过tag获取对应的Fragment			
			Frag1Fragment frag1= (Frag1Fragment) fm.findFragmentByTag(activity.TAG1);	
			if(frag1==null){
				Toast.makeText(getActivity(),"帧布局中找不到TAG1", Toast.LENGTH_SHORT).show();
				return;
			}
			//调用Frag1Fragment.java中的方法
			frag1.setContent(content);		
			break;
		case R.id.button2:
			//切换帧布局中的Fragment
			activity.changeFragmemt(activity.f2, activity.TAG2);
			//通过tag获取对应的Fragment			
			Frag2Fragment frag2= (Frag2Fragment) fm.findFragmentByTag(activity.TAG2);
			if(frag2==null){
				Toast.makeText(getActivity(),"帧布局中找不到TAG2", Toast.LENGTH_SHORT).show();
				return;
			}
			//调用Frag2Fragment.java中的方法
			frag2.setContent(content);
			break;
		case R.id.button3:
			//切换帧布局中的Fragment
			activity.changeFragmemt(activity.f3, activity.TAG3);
			//通过tag获取对应的Fragment			
			Frag3Fragment frag3= (Frag3Fragment) fm.findFragmentByTag(activity.TAG3);
			if(frag3==null){
				Toast.makeText(getActivity(),"帧布局中找不到TAG3", Toast.LENGTH_SHORT).show();
				return;
			}
			//调用Frag3Fragment.java中的方法
			frag3.setContent(content);
			break;		
		}		
		
	}

}

猜你喜欢

转载自blog.csdn.net/qq15577969/article/details/80704282