AndroidAnnotations——Enhance Fragments 优化Fragments

翻译 2013年12月04日 15:55:43

Enhance Fragments 优化Fragments


Support for FragmentActivity 对FragmentActivity的支持

Since AndroidAnnotations 2.1

Prior to AndroidAnnotations 2.6, there was no support for fragment injection. However, we made sure that at least extending FragmentActivity instead of Activity didn't break AndroidAnnotations:
AndroidAnnotations 2.6之前,并没有对fragment注入的支持。但是我们保证至少继承FragmentActivity 代替Activity 不会削弱AndroidAnnotations:
@EActivity(R.id.main)
public class DetailsActivity extends FragmentActivity {

}

Fragment Support Fragment支持

Since AndroidAnnotations 2.6

AndroidAnnotations supports both android.app.Fragment andandroid.support.v4.app.Fragment, and automatically uses the right APIs based on the fragment types. AndroidAnnotations支持android.app.Fragment android.support.v4.app.Fragment,并且基于fragment类型自动使用正确的API。

Enhanced Fragments 优化Fragments

To start using AndroidAnnotations features in a fragment, annotate it with @EFragment:在fragment中使用AndroidAnnotations需要给它加@EFragment注解:

@EFragment
public class MyFragment extends Fragment {

}

AndroidAnnotations will generate a fragment subclass with a trailing underscore, e.g.MyFragment_. You should use the generated subclass in your xml layouts and when creating new instance fragments:AndroidAnnotations将生成一个尾部带下划线的fragment子类,比如MyFragment_。你需要在布局xml文件和创建实例的时候使用生成的子类

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/myFragment"
        android:name="com.company.MyFragment_"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

Programmatically:代码方式:

MyFragment fragment = new MyFragment_();

You can now use all kind of annotations in your fragment:现在你可以在你的fragment中使用全部的注解:

@EFragment
public class MyFragment extends Fragment {
        @Bean
        SomeBean someBean;
        
        @ViewById
        TextView myTextView;

        @App
        MyApplication customApplication;
        
        @SystemService
        ActivityManager activityManager;
        
        @Click
        void myButton() {
        }

        @UiThread
        void uiThread() {

        }

        @AfterInject
        void calledAfterInjection() {
        }
        
        @AfterViews
        void calledAfterViewInjection() {
        }
}
View injection and event listener binding will only be based on views contained inside the fragment. Note, however, that it's isn't currently the case for @EBean injected inside fragments: they have access to the activity views.
视图注入和事件监听绑定将仅仅基于包含在fragment中的视图。然而请注意,这不是 @EBean 注入到fragment中的原因:它们有访问activity视图的权利。

Fragment Layout Fragment布局

The standard way to associate a view with a fragment is to override onCreateView():结合view和fragment的标准方法是重写onCreateView()函数:

@EFragment
public class MyFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
        return view;
    }
}

You can let AndroidAnnotations handle that for you by setting the value param of the@EFragment annotation:你可以让AndroidAnnotations为你处理这种情况,它会设置@EFragment 注解的 value 参数:

@EFragment(R.layout.my_fragment_layout)
public class MyFragment extends Fragment {
}

If you need to override onCreateView(), e.g. because you need to access savedInstanceState, you can still let AndroidAnnotations handle the layout creation by returning null:如果你需要重写onCreateView()函数,可能因为你要使用 savedInstanceState,你仍然可以让AndroidAnnotations 通过返回 null来处理这个布局的创建:

@EFragment(R.layout.my_fragment_layout)
public class MyFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return null;
    }
}

Injecting Fragments 注入Fragments

You may inject fragments in classes annotated with @EActivity@EFragment,@EView,@EViewGroup@EBean, using @FragmentById or @FragmentByTag. If you don't specify any value on the annotation, the field name is used.你可能通过使用 @FragmentById 或者@FragmentByTag将fragment注入到加了 @EActivity@EFragment@EView,@EViewGroup,@EBean注解的类中。假如你没有指定任何值在注解上,将会使用默认字段名。

We recommend using @FragmentById rather then @FragmentByTag, because no compile time validation is performed for the latter.相对于@FragmentByTag  ,我们更推荐使 @FragmentById,因为后者不会执行编译时验证。

Please be aware that @FragmentById and @FragmentByTag can only inject fragments, not create them, so they must already exist in the activity (either by defining them in the layout or by creating them programmatically in onCreate().请注意, @FragmentById  @FragmentByTag 只能注入到fragment中,而不能创建它们,所以它们在activity中必须已经存在(不论是在布局中定义或者在 onCreate()代码中创建。

You can inject fragments even if they are not annotated with @EFragment.你可以注入fragment即使它们没有使用 @EFragment注解。

@EActivity(R.layout.fragments)
public class MyFragmentActivity extends FragmentActivity {
  @FragmentById
  MyFragment myFragment;
        
  @FragmentById(R.id.myFragment)
  MyFragment myFragment2;
        
  @FragmentByTag
  MyFragment myFragmentTag;
        
  @FragmentByTag("myFragmentTag")
  MyFragment myFragmentTag2;
}

本文档的简单示例下载

相关文章推荐

@EFragment增强碎片(Fragment)

原文地址: https://github.com/excilys/androidannotations/wiki/Enhance-Fragments 支持FragmentActivity在And...
  • Mrljdx
  • Mrljdx
  • 2015年04月06日 20:41
  • 870

AndroidAnnotations——Injecting FragmentArg注入Fragment参数

FragmentArg Since AndroidAnnotations 2.7 @FragmentArg The @FragmentArg annotation indicat...

AndroidAnnotations使用详解

Android 最火的快速开发框架androidannotations配置详解文章中有eclipse配置步骤,Android 最火快速开发框架AndroidAnnotations简介文章中的简单介...

Android Fragment 真正的完全解析(上)

自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragment如何产...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...

CT图像重建技术

由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术 1.引言 计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串  find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|xargs g...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AndroidAnnotations——Enhance Fragments 优化Fragments
举报原因:
原因补充:

(最多只允许输入30个字)