Framgment的使用

Fragment在Android中时经常使用的一个东西,虽然不是Activity,但是跟Activity的地位差不多。Fragment也有自己的生命周期。

onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->onPause()->onStop()->onDestroy()->onDestory()->onDetach()

onAttach()->onCreate()->onCreateView()->onActivityCreated()相当于Activity的onCreate()

onStart()相当于Activity的onStart()

onResume()相当于Activity的onResume()

onPause()相当于Activity的onPause()

onStop()相当于Activity的onStop()

onDestroy()->onDestory()->onDetach()相当于Activity的onDestroy()

Fragment最开始Android3.0(api 11)出现的,主要是为了解决Pad碎片化问题。当然现在你可以导入support-v4的包使用它。

Fragment的基本使用有两种,一种是静态的创建,一种是动态的创建。

1.静态的创建

(1).activity_main.xml,在一个xml文件中创建了两个fragment

<?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="horizontal" >
    <fragment
        android:id="@+id/fragment1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:name="com.egos.fragmentsample.Fragment1" />
    <fragment
        android:id="@+id/fragment2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:name="com.egos.fragmentsample.Fragment2" />

</LinearLayout>

(2).分别创建两个Fragment

Fragment1.java

public class Fragment1 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		return inflater.inflate(R.layout.fragment1, container, false);
	}
}
Fragment2.java

public class Fragment2 extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		return inflater.inflate(R.layout.fragment2, container, false);
	}
}
(3).创建MainActivity.java

public class MainActivity extends FragmentActivity {
	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		setContentView(R.layout.activity_main);
	}
}
2.动态的创建

(1).创建Fra gment的布局

fragment_dynamic.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" >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is a fragment" />

</LinearLayout>

(2).创建DynamicFragment.java

public class DynamicFragment extends Fragment {
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		return inflater.inflate(R.layout.fragment_dynamic, container, false);
	}

}

(3).创建MainActivity.java以及activity_mian2.xml 

MainActivity.java

public class MainActivity extends FragmentActivity {
	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		setContentView(R.layout.activity_main2);
		if (arg0 == null) {
			getSupportFragmentManager().beginTransaction().add(R.id.container, new DynamicFragment()).commit();
		}
	}
}
activity_mian2.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" >
    <LinearLayout 
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>

</LinearLayout>

可见是通过FragmentManager来管理创建一个Fragment的,可以动态的创建。

那么Aativity和Fragment之应该如何通信呢?上面的情况是通过Activity动态的创建了一个Fragment,那么我操作Fragment里面的内容如何来改变Activity里面的一写信息呢?

在Fragment中是可以通过getActivity来得到对应的Activity的信息的,同时在Activity是可以通过ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);来得到Fragment的信息的。

那么改变Fragment里面的内容是如何来改变Activity里面的信息的呢?一般的情况是通过Listener来实现的。例如:我现在的需求是点击左边的ListView中的item然后来改变相对应的右边的信息。

大概的显示如下。


这样就是在LeftFragment中做一个Listener

public void setOnClickCategory(OnClickCategory listener)
{
    this.listener = listener;
}
public interface OnClickCategory
{
    public void onClick(String category);
}
然后在点击item的时候做相应的操作。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View view = inflater.inflate(R.layout.fragment_left, container, false);
    listview = (ListView) view.findViewById(R.id.category);
    adapter = new LeftAdapter(getActivity(), str);
    listview.setAdapter(adapter);
    listview.setOnItemClickListener(new OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            listener.onClick(str[position]);
        }
    });
    return view;
}
最后只需要在Activity中实现这个接口就行了。

@Override
public void onClick(String category)
{
    fragmentRight = new RightFragment(category);
    getSupportFragmentManager().beginTransaction().replace(R.id.right, fragmentRight).commit();
}
源代码
点击打开链接







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Fragment中添加页面的步骤如下: 1. 创建一个新的布局文件,用于显示新页面的UI元素。 2. 在Fragment类中创建一个新的视图变量,用于引用新页面的根视图。 3. 在onCreateView()方法中加载新页面的布局文件,将其实例化为一个View对象,并将该对象返回。 4. 在新页面的布局文件中添加所需的UI元素,并设置它们的属性和监听器。 5. 在Fragment中实现新页面中UI元素的逻辑,例如按钮点击事件的处理等。 6. 将新页面添加到Fragment的显示列表中,通常使用FragmentManager和FragmentTransaction实现。 具体实现代码可以参考以下示例: ``` public class MyFragment extends Fragment { private View rootView; private Button btnNextPage; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 加载新页面的布局文件 rootView = inflater.inflate(R.layout.fragment_page2, container, false); // 获取新页面中的UI元素 btnNextPage = (Button) rootView.findViewById(R.id.btn_next_page); // 设置UI元素的监听器 btnNextPage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理按钮点击事件 // TODO: 进入下一个页面 } }); // 返回新页面的根视图 return rootView; } // 将新页面添加到Fragment的显示列表中 private void addNextPage() { FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment_container, new NextFragment()); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值