zoukankan      html  css  js  c++  java
  • android studio 2.2.2下fragment的创建和跳转

    一,首先,Fragment是android应用中十分重要的一个功能,十分轻量化,也类似于activity一样,是一个个布局,可以相互跳转和传递参数。但是,它运行起来十分流畅,而且易于管理,下面是在学习时候看慕课网中的一些接受:

    Fragment在应用中应当是一个模块化和可重用的组件,因为Fragment定义了它自己的布局,以及通过使用它自己的生命周期回调方法定义了自己的行为,你可要将Fragment包含到多个Activity中去。

    (1)Fragment可以作为Activity的一部分展现出来

    (2)一个Activity可以包含多个Fragment,一个Fragment也可以在多个Activity中使用。

    (3)Activity运行过程中,可以添加移除和替换Fragment

    (4)Fragment可以相应自己的输入事件,并且有自己的生命周期,生命后期受宿主Activity的生命周期影响

    手机和平板的屏幕差别较大,利用Fragment可以实现代码的通用度较高,这样在开发两种app时候可以改动较小实现。

    二,android studio 2.2.2中带fragment的activity的创建:

    在某些网站学习时候,发现在早一些的版本的as中是可以直接创建带有fragment的activity的,在1.5之后就不支持了,也不是不支持,只是不能直接选择了,在后面的步骤中可以选择。

    1,首先,new一个新的工程,选择basic activity

    2,然后在下一步里选择带有fragment

    3,点击finish我们就完成了创建,创建完成后,我们整体的文件布局是这样子的:

    4,这样子还没有完,在MainActivity中我们还需要进行页面加载的操作:

    例如:我们创建完后MainActivity是这样子的(这样是无法运行的)

    ,我们需要在里面加一句话:

     1 public class MainActivity extends AppCompatActivity {
     2 
     3     @Override
     4     protected void onCreate(Bundle savedInstanceState) {
     5         super.onCreate(savedInstanceState);
     6         setContentView(R.layout.activity_main);
     7         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
     8         setSupportActionBar(toolbar);
     9 
    10         FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    11         fab.setOnClickListener(new View.OnClickListener() {
    12             @Override
    13             public void onClick(View view) {
    14                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
    15                         .setAction("Action", null).show();
    16             }
    17         });
    18 
    19        //需要添加的语句:
    20         if (savedInstanceState == null) {
    21             getSupportFragmentManager().beginTransaction().add(R.id.fragment, new MainActivityFragment()).commit();
    22         }
    23     }
    MainActiviy

    5.1   在fragment_main 中添加一个按钮,用来跳到下一个fragment页面

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:id="@+id/content_main"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"
     7     android:paddingBottom="@dimen/activity_vertical_margin"
     8     android:paddingLeft="@dimen/activity_horizontal_margin"
     9     android:paddingRight="@dimen/activity_horizontal_margin"
    10     android:paddingTop="@dimen/activity_vertical_margin"
    11     android:orientation="vertical"
    12     tools:context="examples.ouc.com.fragment.MainActivityFragment"
    13     tools:showIn="@layout/activity_main">
    14 
    15     <TextView
    16         android:layout_width="wrap_content"
    17         android:layout_height="wrap_content"
    18         android:text="Hello World!" />
    19 
    20     <Button
    21         android:text="点我"
    22         android:layout_width="match_parent"
    23         android:layout_height="wrap_content"
    24         android:id="@+id/btnShowAnotherFragment" />
    25 
    26 </LinearLayout>
    fragment_main

    5.2  在MainActivityFragment中对动作进行配置和代码操作:

      需要重写onCreateView,然后获取到页面中的按钮,然后添加事件监听器

    public class MainActivityFragment extends Fragment {
    
        public MainActivityFragment() {
        }
        
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            System.out.println("onCreateView");
            View rootView =  inflater.inflate(R.layout.fragment_main, container, false);
            rootView.findViewById(R.id.btnShowAnotherFragment).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    getFragmentManager().beginTransaction()
                            .addToBackStack(null)
                            .replace(R.id.fragment,new AnotherFragment())
                            .commit();
                }
            });
    MainActivityFragment

      上面的代码是跳到第二个fragment页面,下面我们对第二个Fragment进行创建和操作:

    6.1首先创建一个layout的布局文件,

      并且在里面添加一个按钮,用来点击返回上一个

      取名fragment_another

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical" android:layout_width="match_parent"
     4     android:layout_height="match_parent">
     5 
     6     <TextView
     7         android:text="这是另一个fragment"
     8         android:layout_width="match_parent"
     9         android:layout_height="wrap_content"
    10         android:id="@+id/textView" />
    11 
    12     <Button
    13         android:text="BACK"
    14         android:layout_width="match_parent"
    15         android:layout_height="wrap_content"
    16         android:id="@+id/btnBack" />
    17 
    18 </LinearLayout>
    fragment_another

    6.2然后我们创建一个class让它继承自Fragment

      //注意Fragment一定要导入的是:

    import android.support.v4.app.Fragment;
     1 public class AnotherFragment extends Fragment {
     2     
     3     @Override
     4     public void onCreate(@Nullable Bundle savedInstanceState) {
     5         System.out.println("onCreate...");
     6         super.onCreate(savedInstanceState);
     7     }
     8 
     9     @Nullable
    10     @Override
    11     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    12         System.out.println("onCreateView...");
    13         View root = inflater.inflate(R.layout.fragment_another,container,false);
    14         root.findViewById(R.id.btnBack).setOnClickListener(new View.OnClickListener() {
    15             @Override
    16             public void onClick(View v) {
    17                 getFragmentManager().popBackStack();
    18             }
    19         });
    20         return root;
    21     }
    AnotherFragment

    6.3注意,我们里面用到了popBackStack()函数,一看便知道,他用到了栈!

      因此我们在MainActivityFragment中,我们获取到了Fragment后,我们写了一个     addtoBackStack,如果我们不需要添加后退功能,这个是不需要加的,只不是我们一点返回键,app就会退出了~

    1  getFragmentManager().beginTransaction()
    2                         .addToBackStack(null)
    3                         .replace(R.id.fragment,new AnotherFragment())
    4                         .commit();

    7,至此,我们的fragment就完成了,可以提交到模拟器运行了~~~

          

  • 相关阅读:
    [转载] set IDENTITY_INSERT on 和 off 的设置
    固定GridView的表头和某几列
    图形文件格式小常识
    MVP——ModelViewerPresenter [ZT]
    VB.NET 中图形旋转任意角度 [ZT]
    工厂方法模式和抽象工厂模式之比较 [Z]
    Visual C# 语言概念数据类型(C# 与 Java)
    LINQ 中使用 Distinct 的 Compare过滤重复的字段
    How to load AJAX content into current Colorbox window?
    解决FTP服务器FileZilla server中文乱码问题
  • 原文地址:https://www.cnblogs.com/icyhusky/p/6048162.html
Copyright © 2011-2022 走看看