码迷,mamicode.com
首页 > 移动开发 > 详细

06Android学习从零单排之Fragment

时间:2016-05-12 13:41:32      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

06Android学习从零单排之Fragment

这是Android基础学习的最后一个部分,该部分学习完成后,将不在更新“Android学习从零单排”系列blog,在这个部分学习完成后,我也将开始学习Android项目编写。

Fragment入门

  • 在layout文件中添加2个fragment布局
<fragment
        android:name="com.example.xwf.hsia06fragmentdemo.LeftFragment"
        android:id="@+id/left"      //必须加ID,不然就报错
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/>
    <fragment
        android:name="com.example.xwf.hsia06fragmentdemo.RightFragment"
        android:id="@+id/right"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"/>
  • 再编写2个layout种指定的2个Fragment类文件。
public class LeftFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_left, null);
        return view;
    }
}

Fragment动态添加

  • 编写2个Fragment文件。
  • 在Activity中通过getFragmentManager获得FragmentTransaction事务。
  • 通过FragmentTransaction替换Fragment布局
  • 提交事务。
    技术分享

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //动态加载Fragment,通过屏幕的横竖屏来动态加载
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        Point point = new Point();
        wm.getDefaultDisplay().getSize(point);
        int x = point.x;
        int y = point.y;
        FragmentManager fm = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        if (x<y) {
            fragmentTransaction.replace(android.R.id.content,new VerticalFragment());
        }else{
            fragmentTransaction.replace(android.R.id.content,new HorizontalFragment());
        }
        //提交事务
        fragmentTransaction.commit();
    }

Fragment模仿微信页面

技术分享

需要注意的是在onClick中需要重新获得事务。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        butterknife.ButterKnife.bind(this);
        btnWechat.setOnClickListener(this);
        btnContact.setOnClickListener(this);
        btnFriend.setOnClickListener(this);
        btnInformation.setOnClickListener(this);
        fm = getFragmentManager();
        //默认是微信页面
        fm.beginTransaction().replace(R.id.ll_replace,new WeChatFragment()).commit();
    }

    @Override
    public void onClick(View v) {
        //在onClick里面需要重新获取事务
        FragmentTransaction ft =  fm.beginTransaction();
            switch (v.getId()) {
                case R.id.btn_wechat:
                    ft.replace(R.id.ll_replace,new WeChatFragment());
                    break;
                case R.id.btn_contact:
                    ft.replace(R.id.ll_replace,new ContactFragment());
                    break;
                case R.id.btn_friend:
                    ft.replace(R.id.ll_replace,new FriendFragment());
                    break;
                case R.id.btn_information:
                    ft.replace(R.id.ll_replace,new InformationFragment());
                    break;
            }
        ft.commit();
    }

Fragment间通信

技术分享

主要通过getFragmentManager().findFragmentByTag(“LeftFragment”)来获取到另一个Fragment对象,并调用里面的方法。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.fragment_right, null);
        Button btn = (Button) layout.findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LeftFragment lf = (LeftFragment) getFragmentManager().findFragmentByTag("LeftFragment");
                lf.setText("数据已更改!");
            }
        });
        return layout;
    }

Android动画集合

技术分享
- 在res下新建一个anim文件夹,将一些动画文件放在该文件下。
- 在Activity中通过AnimationUtils来加载各种动画资源文件。

public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                Animation a1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);
                iv.startAnimation(a1);
                break;
            case R.id.btn2:
                Animation a2 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
                iv.startAnimation(a2);
                break;
            case R.id.btn3:
                Animation a3 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale);
                iv.startAnimation(a3);
                break;
            case R.id.btn4:
                Animation a4 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
                iv.startAnimation(a4);
                break;
            case R.id.btn_set:
                Animation set = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.set);
                iv.startAnimation(set);
                break;
        }
    }

AutoCompleteTextView控件的学习使用

该控件主要是模糊提示,根据你的首字母,它会自动提示你可能需要输入的内容。根据开发文档cop一份就行了

技术分享

private static final String[] COUNTRIES = new String[] {
            "Belgium", "France", "Italy", "Germany", "Spain"
    };

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

        AutoCompleteTextView ACTV = (AutoCompleteTextView) findViewById(R.id.actv);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, COUNTRIES);
        ACTV.setAdapter(adapter);
    }

关于作者
- 个人网站:北京互联科技
- Email:xiaweifeng@live.cn
- 项目地址:https://github.com/swordman20/Hsia06FragmentDemo.git

06Android学习从零单排之Fragment

标签:

原文地址:http://blog.csdn.net/java04/article/details/51365321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!