Fragments In Android Studio

原英文链接:Fragments in Android Studio

这篇指南将会教你在Android Studio上简单地创建和使用Fragment,并在fragment里添加一个按钮,点击按钮会发送一个个动作给持有该fragment的父activity,并且显示一个Toast通知。


Getting Started

打开Android Studio 并且点击“File -> New Project”,会打开新建项目的向导窗口。在窗口中为你的app命名为“FragmentExample”。

在往下深入之前,要说明下,在新建项目向导窗口的底部有个“Support Mode”选项。如果你想要在Pre-Honeycomb(3.0之前的版本)设备上使用fragemnt,你就会用到“Support Mode”选项来确保fragemnts向后(下)兼容(fragmetns是在3.0及之后才有的,所以在3.0以前的版本需要使用v4包里的fragemnt,选择了fragemnt的选项即使在低版本的sdk下也会自动提供支持fragment的库文件)。

The Fragment Wizard in Android Studio

                                     Android Studio project wizard


现在我先不选择“Support Mode”里的选项,而是手动选择API Level到Honeycomb:

http://airpair-blog.s3.amazonaws.com/wp-content/uploads/2014/02/honeycomb.png

像上面那样操作完后,“Support Mode”里Fragment选项会自动消失。一直点击“Next”,直到得到如下面的截图内容:

http://airpair-blog.s3.amazonaws.com/wp-content/uploads/2014/02/fragment_main.png

正如你说看到的那样,Android Studio会自动生成一个Fragment。然后由于我们要学习fragment的使用,我们将要创建和修改我们自己自定义的fragment。

What is a Fragment in Android Studio?

Fragments in Android Studio

在Android中,一个Fragemnt是一个在Activity里表示行为或用户界面的一部分的类。Fragemtn被用来生成UI,可以适应各种各样的设备方向,以及无缝地适应手机和平板。你甚至可以咋同一个activity里使用多个fragments以及当用户选择设备时重新排列他们。

Android Studio可以生成多种类型的fragments:ListFragments,可以以列表的形式显示数据项或者表格的形式和“基本的”经常控制一个简单布局的fragments。今天我们只谈论最基本的fragment。

用Android Studio生成Fragment

先来熟悉Android Studio怎样来创建新的fragments以及其布局需求。


Creating an Android Component in Android Studio

首先,在你要生成fragment的文件夹上右击,选择“New -> Android Component”。

Creating a new Blank Fragment

然后,你会看到Android Component生成向导。继续选择“New Blank Fragment”。像下图所示,提示你生成一个布局文件以及一些基本的工厂方法和回调。

http://airpair-blog.s3.amazonaws.com/wp-content/uploads/2014/02/Empty-Fragment.png

接着,给fragment明明为“BlankFragment”或者随便你想叫什么都可以。勾选"Create layout XML"和其他工程方法。

操作顺利,新的fragment和他的布局文件就会在项目中被创建,如下图:

http://airpair-blog.s3.amazonaws.com/wp-content/uploads/2014/02/black-layout.png

打开“fragment_blank.xml”,你会看到下面的内容:

Generated fragment layout

(只是一个简单的FramLayout带有一个TextView,该TextView显示“Hello blank fragment”)

添加一个Button到Fragment

我们的fragment现在很不耐烦了,开始添加一个按钮和交互吧。

在Android Studio “design”预览中,选择"fragment_blank.xml"文件,拖动一个按钮到中心位置。把按钮上的文字修改为“Wheee!”,这样会在BlankFragment中生成一个id为button的按钮。

Android Studio Design Perspective

打开BlankFragment关联的类,像下面一个添加和修改内容。基本上就是从布局文件中取出按钮,然后给他添加监听:

private Button mButton; //Add at the top of the fragment 

... 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = null;
     view = inflater.inflate(R.layout.fragment_blank, container, false);
     mButton = (Button) view.findViewById(R.id.button); 
     mButton.setOnClickListener(this); 
     return view; 
}
操作完后,Android Studio会抛出一个警告:你还未实现Button.OnClickListener。解决这个问题,要在BlankFragment类的署名上添加"implements Button.OnClickListener":

private Button mButton; //Add at the top of the fragment

...

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = null;
    view = inflater.inflate(R.layout.fragment_blank, container, false);
    mButton = (Button) view.findViewById(R.id.button);
    mButton.setOnClickListener(this);
    return view;
}

Once you have done that and hit “save,” Android


Read more at http://www.airpair.com/android/fragments-android-studio#bQriuvchXAtfv2tf.99
private Button mButton; //Add at the top of the fragment

...

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = null;
    view = inflater.inflate(R.layout.fragment_blank, container, false);
    mButton = (Button) view.findViewById(R.id.button);
    mButton.setOnClickListener(this);
    return view;
}

Once you have done that and hit “save,” Android


Read more at http://www.airpair.com/android/fragments-android-studio#bQriuvchXAtfv2tf.99

OnClickListener

现在在类的底部会生成这个方法,警告也随之消除了。

public void onClick(View v){ 
   //Nothing here yet 
}
现在我们可以监听到按钮"Whee"的点击事件了。

Fragments和Activities之间的通讯

经常会有这种个情况,即我们想要知道在activity中的fragment发生了什么,其中一种方法就是使用熟悉的代理模式——持有父Activity的引用用来传递信息。

幸运的是,Android Studio已经自动为我们生成了代理。如果看"BlankFragment"的顶部,你会看到:

private OnFragmentInteractionListener mListener;
往下,你还会看到:

public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    public void onFragmentInteraction(Uri uri); 
}
这就是我们所需要的基本方法,当点击“Whee”按钮时会发送消息给我们的activity。

在Activity中创建Fragments

回到项目的根Activity“MainActivity”,当MainActivity加载时我们想要发生的第一件事是添加BlankFragment到该activity中,方便用户可以看到fragment中发生了什么。

在onCreate()方法中添加/更新如下代码,去指定BlankFragment作为默认的fragment:

Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
        getSupportFragmentManager()
                             .beginTransaction() 
                .add(R.id.container, new BlankFragment()) 
                .commit(); 
    } 
}
Side Note:注意Android Studio仍然是默认使用的“support”库,通过“getSupportFragmentManager”。如果你瞄准的是未来的Android API(

f you are targeting future Android APIs you should get used to simply using “getFragmentManager.”
Read more at http://www.airpair.com/android/fragments-android-studio#ebkLGJp9sibvqyRK.99
f you are targeting future Android APIs you should get used to simply using “getFragmentManager.”
Read more at http://www.airpair.com/android/fragments-android-studio#ebkLGJp9sibvqyRK.99
f you are targeting future Android APIs you should get used to simply using “getFragmentManager.”
Read more at http://www.airpair.com/android/fragments-android-studio#ebkLGJp9sibvqyRK.99
targeting future Android APIs),你应该更习惯使用“getFragmentManager”。


接下来,我们需要对我们FragmentActivity进行一些修改。


首先,在类MainActivity的署名边上添加“implements BlankFragment。OnFragemntInteractionListener”,然后在MainActivity的某个地方会添加如下的方法:

public void onFragmentInteraction(Uri uri){ 
   Toast toast = Toast.makeText(this, "Wheeee!",Toast.LENGTH_SHORT); 
   toast.show(); 
}
接着,观察在Android Studio中自动生成的“onAttach”方法。mListener对象被自动指定给父activity,所以我们不需要再去进一步操作:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
        mListener = (OnFragmentInteractionListener) activity; 
    } catch (ClassCastException e) { 
        throw new ClassCastException(activity.toString() 
            + " must implement OnFragmentInteractionListener"); 
    } 
}
最后,修改按钮的监听方法:

public void onClick(View v){
   mListener.onFragmentInteraction(null);
}
现在,当你运行该Android应用时,点击“Whee”按钮,一个Toast会弹出来并显示“Wheee”。
Whee in Action







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值