Android:UI控件Fragment、FragmentStack

简介:

Fragment的实现有两种方法:xml直接添加和通过代码添加。

下面xml中的<fragment和<RelativeLayout分别使用xml添加和代码添加:

XML代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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"
     android:paddingBottom= "@dimen/activity_vertical_margin"
     android:paddingLeft= "@dimen/activity_horizontal_margin"
     android:paddingRight= "@dimen/activity_horizontal_margin"
     android:paddingTop= "@dimen/activity_vertical_margin"
     tools:context= ".FragmentActivity"  >
     <fragment
         android:id= "@+id/fragment1"
         android:name= "com.example.aexh32_fragment.MyFragment"
         android:layout_width= "wrap_content"
         android:layout_height= "wrap_content"
         android:layout_alignLeft= "@+id/textView1"
         android:layout_below= "@+id/textView1"
         android:layout_marginTop= "52dp"  />
     <RelativeLayout
         android:id= "@+id/relayout"
         android:layout_width= "match_parent"
         android:layout_height= "wrap_content"
         android:layout_alignParentBottom= "true"
          >
     </RelativeLayout>
</RelativeLayout>


MyFragment类:(通过xml添加,直接新建一个Fragment类,从ui面板选择Fragment添加)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import  android.os.Bundle;
import  android.support.v4.app.Fragment;
import  android.view.LayoutInflater;
import  android.view.View;
import  android.view.ViewGroup;
import  android.webkit.WebView.FindListener;
import  android.widget.TextView;
public  class  MyFragment  extends  Fragment
{
     //指定Fragment的layout,设置对应的控件事件
     @Override
     public  View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
     {
         View layout = inflater.inflate(R.layout.frangment_layout,  null );
         TextView textView = (TextView) layout.findViewById(R.id.textView1);
                                                                                                                                                             
         return  layout;
     }
}


FragmentActivity类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import  android.os.Bundle;
import  android.app.Activity;
import  android.support.v4.app.Fragment;
import  android.support.v4.app.FragmentTransaction;
import  android.view.Menu;
public  class  FragmentActivity  extends  android.support.v4.app.FragmentActivity  //导入的必须是support.v4才能支持2.3
{
     /**
      * 两种方法:
      * 1.xml可视化添加:
      * 先写好Fragment类,添加对应类的Fragment控件
      * 2.通过代码添加Fragment
      */
                                                                                                                                               
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_fragment);
                                                                                                                                                   
         //通过代码添加
         FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
         MyFragment newFragment =  new  MyFragment();
         ft.add(R.id.relayout, newFragment); //将MyFragment添加到relayout里
         ft.commit(); //add、remove、replace后,都需要commit提交一下
     }
}




其他:

1.将fragment放入栈中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void  addFragmentToStack()
{
     mStackLevel++;
     // Instantiate a new fragment.
     Fragment newFragment = CountingFragment.newInstance(mStackLevel);
     // Add the fragment to the activity, pushing this transaction
     // on to the back stack.
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
     ft.replace(R.id.simple_fragment, newFragment);
                                                                                                      
     //下面两句是关键
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
     ft.addToBackStack( null );
     ft.commit();
}


2.管理Fragment:

要在activity中管理fragment,需要使用FragmentManager. 通过调用activity的getFragmentManager()取得它的实例.

可以通过FragmentManager做一些事情, 包括:

1.使用findFragmentById()(用于在activity layout中提供一个UI的fragment)或findFragmentByTag()(适用于有或没有UI的fragment)获取activity中存在的fragment

2.将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).

3.使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.

参考资料:http://blog.csdn.net/aomandeshangxiao/article/details/7671533




3.fragment之间传递参数


传递参数的fragment:

1
2
3
4
5
6
7
8
9
10
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
InfoFragment fragment =  new  InfoFragment();
Bundle bundle =  new  Bundle();
bundle.putInt(Contant.KEY_BUNDLE_POSITION, position);
fragment.setArguments(bundle);
ft.replace(R.id.list_fraglayout, fragment);
ft.setCustomAnimations(R.anim.slide_right_enter, R.anim.slide_left_out, R.anim.slide_left_in, R.anim.slide_right_exit);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack( null );
ft.commit();


接收参数的fragment:

1
int  mId = getArguments().getInt(Contant.KEY_BUNDLE_POSITION);



4.找到对应Fragment

1
2
3
4
5
6
7
8
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = (LoadRateTypeFragment) fm.findFragmentByTag(HBContant.FRAGMENT_TAG_LOADRATETYPE);
if  (fragment ==  null )
{
     fragment =  new  LoadRateTypeFragment();
     fragment.setTargetFragment(fragment,  0 );
     fm.beginTransaction().add(fragment, HBContant.FRAGMENT_TAG_LOADRATETYPE).commit();
}



本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1229559,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
21天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
1月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
40 2
|
1月前
|
人工智能 API Apache
推荐3款开源、美观且免费的WinForm UI控件库
推荐3款开源、美观且免费的WinForm UI控件库
201 6
|
2月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
28 3
|
1月前
|
API C# 开发者
基于Material Design风格开源、免费的WinForms UI控件库
基于Material Design风格开源、免费的WinForms UI控件库!
|
2月前
|
Linux C# Android开发
分享3款开源、免费的Avalonia UI控件库
分享3款开源、免费的Avalonia UI控件库
261 0
|
3月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
85 1
|
2月前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
47 0