Fragment:
是一种可以嵌入在Activity中的 UI 片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板和目前的大屏手机上应用的非常广泛(只要屏幕大,都会用到Fragment)。一般运用在编写平板
简单创建fragment:
先创建一个Fragment静态加载
package com.example.myrun.fragmentpage;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.myrun.R;
/**
* A simple {@link Fragment} subclass.
*/
public class FriendFragment extends Fragment {
public FriendFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_friend, container, false);
}
}
fragment_layout
<FrameLayout 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:background="#44ff55"
tools:context="com.example.myrun.fragmentpage.FirstFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private FirstFragment firstFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager=getFragmentManager();
fragmentTransaction=fragmentManager.beginTransaction();
}
main_layout
<?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"
>
<fragment
android:id="@+id/fragment_a"
android:name="com.example.myrun.fragmentpage.FirstFragment"/>
android:layout_width="match_parent"
android:layout_height="200dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bttona"
android:text="调用fragmwntA"/>
</LinearLayout>
Fragment动态加载怎么用
transaction.add()
往Activity中添加一个Fragment
transaction.remove()
从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁;数据会被销毁。
transaction.replace()
使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体。
transaction.hide();transaction.show()
隐藏当前的Fragment,仅仅是设为不可见,并不会销毁,显示之前隐藏的Fragment,数据不会销毁。
MainActivity
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.myrun.fragmentpage.FirstFragment;
import com.example.myrun.fragmentpage.SecondFragment;
import com.example.myrun.fragmentpage.UsersFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button1,button2,button3;
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private FirstFragment firstFragment;
private SecondFragment secondFragment;
private UsersFragment usersFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
fragmentManager=getFragmentManager();
fragmentTransaction=fragmentManager.beginTransaction();
}
private void init() {
button1=(Button) findViewById(R.id.main_one);
button2= (Button) findViewById(R.id.main_two);
button3= (Button) findViewById(R.id.main_three);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
fragmentTransaction=fragmentManager.beginTransaction();
switch (v.getId()){
case R.id.main_one:
if (firstFragment==null){
firstFragment=new FirstFragment();
}
fragmentTransaction.replace(R.id.main_frame,firstFragment);
break;
case R.id.main_two:
if (secondFragment==null){
secondFragment=new SecondFragment();
}
fragmentTransaction.replace(R.id.main_frame,secondFragment);
break;
case R.id.main_three:
if (usersFragment==null){
usersFragment=new UsersFragment();
}
fragmentTransaction.replace(R.id.main_frame,usersFragment);
break;
}
fragmentTransaction.commit();
}
}
main_layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.myrun.MainActivity">
<FrameLayout
android:id="@+id/main_frame"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9">
</FrameLayout>
<LinearLayout
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/main_one"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="按钮一"/>
<Button
android:id="@+id/main_two"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="按钮二"/>
<Button
android:id="@+id/main_three"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="按钮三"/>
</LinearLayout>
</LinearLayout>
firstFragmentlayout
<FrameLayout 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:background="#44ff55"
tools:context="com.example.myrun.fragmentpage.FirstFragment">
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
FirstFragment
public class FirstFragment extends Fragment {
private static final String TAG = "FirstFragment";
public FirstFragment() {
// Required empty public constructor
}
@Override
public void onAttach(Context context) {
Log.d(TAG, "onAttach: ");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_first, container, false);
}
ViewPager+Fragment实现页面切换
1,在主页面布局中导入v4下的ViewPager
2,创建适配器继承FragmentPagerAdapter
3,实现滑动切换功能
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main2_vp"></android.support.v4.view.ViewPager>
public class WeixinAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public WeixinAdapter(FragmentManager fm ,List<Fragment> fragmentList) {
super(fm);
this.fragmentList=fragmentList;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
public class Main2Activity extends AppCompatActivity implements View.OnClickListener{
private ViewPager viewPager;
private List<Fragment> fragmentList=new ArrayList<>();
private ContactFragment contactFragment;
private FriendFragment friendFragment;
private ChatFragment chatFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
viewPager= (ViewPager) findViewById(R.id.main2_vp);
chatFragment=new ChatFragment();
contactFragment=new ContactFragment();
friendFragment=new FriendFragment();
fragmentList.add(chatFragment);
fragmentList.add(contactFragment);
fragmentList.add(friendFragment);
WeixinAdapter weixinAdapter=new WeixinAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(weixinAdapter);
}
}
Fragment生命周期
onAttach():
执行该方法时,Fragment与Activity已经完成绑定
onCreate():
初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
onCreateView():
初始化Fragment的布局。
onStart():
执行该方法时,Fragment由不可见变为可见状态。
onResume():
执行该方法时,Fragment处于活动状态,用户可与之交互。
onPause():
执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。
onSaveInstanceState():
保存当前Fragment的状态。该方法会自动保存Fragment的状态
onStop():
执行该方法时,Fragment完全不可见。
onDestroyView():
销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。
onDestroy():
销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach():
解除与Activity的绑定。在onDestroy方法之后调用。
public class FirstFragment extends Fragment {
private static final String TAG = "FirstFragment";
public FirstFragment() {
// Required empty public constructor
}
@Override
public void onAttach(Context context) {
Log.d(TAG, "onAttach: ");
}
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate: ");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_first, container, false);
}
@Override
public void onStart() {
Log.d(TAG, "onStart: ");
}
@Override
public void onResume() {
Log.d(TAG, "onResume: ");
}
@Override
public void onPause() {
Log.d(TAG, "onPause: ");
}
@Override
public void onStop() {
Log.d(TAG, "onStop: ");
}
@Override
public void onDestroyView() {
Log.d(TAG, "onDestroyView: ");
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onDetach() {
Log.d(TAG, "onDetach: ");
}
}