首页 > 其他分享 >Fragment初学2——使用Fragment

Fragment初学2——使用Fragment

时间:2023-09-21 10:08:31浏览次数:38  
标签:transaction Fragment menu public 初学 使用 main id


一般创建Fragment需要实现如下三个方法。


onCreate():系统创建Fragment对象后回调该方法,实现代码中只初始化Fragment中的组件。


onCreateView(): 当Fragment绘制界面组件时回调该方法,该方法返回的view就是该Fragment所显示的View。


onPause(): 当用户离开该Fragment时回调该方法。


好了,开始使用吧,最简单的用法—— 静态使用Fragment


步骤:


1、首先继承Fragment,重写onCreateView()方法设置Fragemnt的布局


2、在Activity中声明此Fragment,然后当做普通的View组件使用




下面一个具体例子:


TitleFragment的布局文件:

<?xml version="1.0" encoding="utf-8"?> 
 
 <RelativeLayout xmlns:android=" 
 http://schemas.android.com/apk/res/android"   
 
     android:layout_width="match_parent"   
 
     android:layout_height="45dp"   
 
     android:background="@drawable/toolbar_bg" 
 
      >   
 
    
 
     <ImageButton   
 
         android:id="@+id/imgBtn_title_fragment"   
 
         android:layout_width="wrap_content"   
 
         android:layout_height="wrap_content"   
 
         android:layout_centerVertical="true"   
 
         android:layout_marginLeft="3dp"   
 
         android:background="@drawable/imgbtn_bg" />   
 
    
 
     <TextView   
 
         android:layout_width="fill_parent"   
 
         android:layout_height="fill_parent"   
 
         android:gravity="center"   
 
         android:text="Fragment标题"   
 
         android:textColor="#fff"   
 
         android:textSize="20sp"   
 
         android:textStyle="bold" />   
 

 </RelativeLayout>


TitleFragment.java类:



public class TitleFragment extends Fragment { 

 

   private ImageButton mImageButton; 

 
 
 
 

   @Override 

 

   public View onCreateView(LayoutInflater inflater, ViewGroup container, 

 

     Bundle savedInstanceState) { 

 

    View view = inflater.inflate(R.layout.fragment_title, container, false); 

 

    mImageButton = (ImageButton) view.findViewById(R.id.imgBtn_title_fragment); 

 

    mImageButton.setOnClickListener(new OnClickListener() { 

 

     @Override 

 

     public void onClick(View v) { 

 

      Toast.makeText(getActivity(), "这是TitleFragment! ", 

 

        Toast.LENGTH_LONG).show(); 

 

     } 

 

    }); 

 

    return view; 

 

   } 

 
 
 
 

  }


同理FirstFragment的布局文件:



<?xml version="1.0" encoding="utf-8"?> 
 
 <RelativeLayout 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="match_parent" 
 
         android:layout_height="match_parent" 
 
         android:gravity="center" 
 
         android:text="第一个Fragment" 
 
         android:textSize="20sp" 
 
         android:textStyle="bold" /> 
 
 </RelativeLayout>



FirstFragment .java类:


public class FirstFragment extends Fragment { 

 
 
 
 

   @Override 

 

   public View onCreateView(LayoutInflater inflater, ViewGroup container, 

 

     Bundle savedInstanceState) { 

 

    return inflater.inflate(R.layout.fragment_first, container, false); 

 

   } 

 

  }


MainActivity布局如下:

<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" > 
 

     <fragment 
 
         android:id="@+id/fragment_title_main" 
 
         android:name="com.example.activity.TitleFragment" 
 
         android:layout_width="match_parent" 
 
         android:layout_height="45dp" /> 
 

     <fragment 
 
         android:id="@+id/fragment_first_main" 
 
         android:name="com.example.activity.FirstFragment" 
 
         android:layout_width="match_parent" 
 
         android:layout_height="match_parent" 
 
         android:layout_below="@+id/fragment_title_main" /> 
 

 </RelativeLayout>


MainActivity.java类



public class MainActivity extends Activity {
 

 
 @Override  
 
    protected void onCreate(Bundle savedInstanceState)  
 
    {  
 
        super.onCreate(savedInstanceState);  
 
        requestWindowFeature(Window.FEATURE_NO_TITLE);  
 
        setContentView(R.layout.activity_main);  
 
    }  
 

 
 @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;
 
 }
 

 
}

说完了静态使用Fragment,下面再说下如何动态使用吧


首先修改下 MainActivity的布局文件


<?xml version="1.0" encoding="utf-8"?> 
 
 <RelativeLayout xmlns:android=" 
 http://schemas.android.com/apk/res/android" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" > 
 

     <fragment 
 
         android:id="@+id/fragment_title_main" 
 
         android:name="com.example.activity.TitleFragment" 
 
         android:layout_width="match_parent" 
 
         android:layout_height="45dp" /> 
 

     <FrameLayout 
 
         android:id="@+id/framelayout_fragment_main" 
 
         android:layout_width="match_parent" 
 
         android:layout_height="match_parent" 
 
         android:layout_above="@+id/linearlayout_toolbar_main" 
 
         android:layout_below="@+id/fragment_title_main" /> 
 

     <LinearLayout 
 
         android:id="@+id/linearlayout_toolbar_main" 
 
         android:layout_width="match_parent" 
 
         android:layout_height="wrap_content" 
 
         android:layout_alignParentBottom="true" 
 
         android:layout_alignParentLeft="true" 
 
         android:background="@drawable/toolbar_bg" > 
 

         <TextView 
 
             android:id="@+id/textView1_main" 
 
             android:layout_width="wrap_content" 
 
             android:layout_height="match_parent" 
 
             android:layout_weight="1" 
 
             android:gravity="center" 
 
             android:text="第一个" 
 
             android:textColor="#fff" 
 
             android:textSize="20sp" /> 
 

         <TextView 
 
             android:id="@+id/textView2_main" 
 
             android:layout_width="wrap_content" 
 
             android:layout_height="match_parent" 
 
             android:layout_weight="1" 
 
             android:gravity="center" 
 
             android:text="第二个" 
 
             android:textColor="#fff" 
 
             android:textSize="20sp" /> 
 
     </LinearLayout> 
 

 </RelativeLayout>


我们第一节说过Fragment是Android3.0引入的API,所以如果使用以前的版本,需要引入v4的包,然后Activity继承FragmentActivity,然后通过 getSupportFragmentManager获得FragmentManager。所以还是建议把Manifest文件的uses-sdk的 minSdkVersion和targetSdkVersion都改为11以上,这样就不必引入v4包了。




MainActivity.java类


public class MainActivity extends Activity implements OnClickListener { 

 
 
 
 

   private Fragment mFirst, mTwo; 

 
 
 
 

   @Override 

 

   protected void onCreate(Bundle savedInstanceState) { 

 

    super.onCreate(savedInstanceState); 

 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 

 

    // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 

 

    // WindowManager.LayoutParams.FLAG_FULLSCREEN); 

 

    setContentView(R.layout.activity_main); 

 
 
 
 

    TextView First = (TextView) findViewById(R.id.textView1_main); 

 

    TextView Two = (TextView) findViewById(R.id.textView2_main); 

 
 
 
 

    First.setOnClickListener(this); 

 

    Two.setOnClickListener(this); 

 

    // 设置默认的Fragment 

 

    setDefaultFragment(); 

 

   } 

 
 
 
 

   private void setDefaultFragment() { 

 

    FragmentManager fm = getFragmentManager(); 

 

    FragmentTransaction transaction = fm.beginTransaction(); 

 

    mFirst = new FirstFragment(); 

 

    transaction.replace(R.id.framelayout_fragment_main, mFirst); 

 

    transaction.commit(); 

 

   } 

 
 
 
 

   @Override 

 

   public void onClick(View v) { 

 

    // TODO Auto-generated method stub 

 

    FragmentManager fm = getFragmentManager(); 

 

    // 开启Fragment事务 

 

    FragmentTransaction transaction = fm.beginTransaction(); 

 
 
 
 

    switch (v.getId()) { 

 

    case R.id.textView1_main: 

 

     if (mFirst == null) { 

 

      mFirst = new FirstFragment(); 

 

     } 

 

     // 使用当前Fragment的布局替代id_content的控件 

 

     transaction.replace(R.id.framelayout_fragment_main, mFirst); 

 

     break; 

 

    case R.id.textView2_main: 

 

     if (mTwo == null) { 

 

      mTwo = new TwoFragment(); 

 

     } 

 

     transaction.replace(R.id.framelayout_fragment_main, mTwo); 

 

     break; 

 

    } 

 

    // transaction.addToBackStack(); 

 

    // 事务提交 

 

    transaction.commit(); 

 

   } 

 
 
 
 

   @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; 

 

   } 

 
 
 
 

  }

代码中的TwoFragment和FirstFragment类似,就不粘代码了,我会上传源代码
源代码

标签:transaction,Fragment,menu,public,初学,使用,main,id
From: https://blog.51cto.com/u_6947107/7548519

相关文章

  • Fragment初学5——使用Fragment的子类PreferenceFragment
    在Android的应用中通常都有setting功能,能够设置一些全局的选项,例如字体颜色,个人喜好等等。这些东西都存在一个xml中,在android中对应的对象就是SharedPreferences。在android3.0之前,我们一般继承PreferenceActivity这个基类去实现相关的方法。在3.0之后的系统中当然选择使用Preferen......
  • Fragment初学7——Fragment在Android开发中的应用1
    Fragment的常用功能通过getFragmentManager()方法,可以得到FragmentManager对象,主要完成下面的功能(1).得到已经存在Fragment对象如果该fragment在布局文件中指定了id,通过findFragmentById()得到对象,或者指定了tag可以通过findFragmentByTag()得到对象Fragment fragment = getFra......
  • Fragment初学4——使用Fragment的子类ListFragment
    ListFragment的例子,MainActivity左边显示一个ListFragment,右边是一个FrameLayout容器,该FrameLayout容器将会动态更新其中的FragmentMainActivity布局文件如下:<?xmlversion="1.0"encoding="utf-8"?><!--定义一个水平排列的LinearLayout,并指定使用中等分隔条-->......
  • 自定义初学2——扩展View
    倘若我们需要的功能找不到对应的系统控件了,这时我们就只能自己绘制了。首先定义一个继承View的基类,然后重写View类的一个或多个方法。通常可以被重写的方法有这些:onFinishInflate():这是一个回调方法,当应用从XML布局文件中加载组件时,该方法将被调用。onMeasure(int,int):该方法......
  • Fragment初学8——Fragment在Android开发中的应用2
    Fragment都是依附于Activity的,通信方式大致也分为如下几种:如果Activity中包含自己管理的Fragment的引用,可以通过直接引用访问所有的Fragment的public方法 如果Activity中未保存任何Fragment的引用,那么可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得......
  • 聊城高新技术企业认定中的专利能多次使用吗
    聊城高新技术企业认定中的专利能多次使用吗恒标知产刘经理 根据高企认定办法,在知识产权的使用次数上,按Ⅱ类评价的知识产权在申请高新技术企业时,仅限使用一次,Ⅰ类知识产权不限次数。例:A公司拥有1项发明专利、5项实用新型专利、5项软著并于2016年顺利通过高企认定,其后,A公司的子公司......
  • SharpPcap的使用
    上面的枚举类型DeviceModes是SharpPcap库中定义的一个枚举,用于表示不同的设备模式。这个枚举被标记为[Flags],这意味着它可以包含多个成员的组合,每个成员都对应于一个位掩码,可以使用按位或操作符来组合成多个模式。下面是DeviceModes枚举中定义的各个成员的介绍:None(无):......
  • 在 Python 中,可以使用线程池(ThreadPoolExecutor)和 wait 方法来等待线程池中的所有任务
    importconcurrent.futures#创建一个线程池withconcurrent.futures.ThreadPoolExecutor()asexecutor:#提交任务给线程池task1=executor.submit(func1,arg1)task2=executor.submit(func2,arg2)task3=executor.submit(func3,arg3)#使......
  • 3.基本语法和浏览器控制台的使用
    掌握浏览器控制台的使用方法:源码,控制台,断点调试,应用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><script>//语法和Java差不多,更加简单//变量varvars......
  • 关于hive中使用group by报错的问题的解决
    问题描述+问题解决在我在hive数据库中使用groupby的函数时,如果在我们决定显示出来的字段名中有非聚合的字段(即字段名为原生字段名,并没有加什么SUM等聚合函数),那么,我们就必须在groupby后面引用上这个非聚合字段,否则就会报错;同时,在我们写数据到新的数据表中时,一定要保证我们所......