zoukankan      html  css  js  c++  java
  • [android]p7-1 fragment学习笔记

    本文源自《android权威编程指南第3版》第7章UI fragment与fragment

    第7章主要内容是实现一个记录不良行为的APP(部分实现),有列表,有具体的行为内容显示。第7章主要完成单个行为详细信息的UI设置,用以理解fragment初始化的过程。


    下面记录一下初始化并加载fragment的一些理解(只粘一些核心代码)

    首先,我在主activity的xml文件中引入<FrameLayout>标签,就像一个占位符一样,占好一个空位,id为fragment_container。

    <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/fragment_container"
        ></FrameLayout>

    主activity的OnCteate方法中是这样初始化的

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            FragmentManager fm = this.getSupportFragmentManager();
            Fragment f = fm.findFragmentById(R.id.fragment_container);
            if(f == null){
                f = new CrimeFragment();
                fm.beginTransaction()
                        .add(R.id.fragment_container, f)
                        .commit();
            }
        }

    总结起来是这样的:

    1. 获取FragmentManager,是调用Activity.getSupportFragmentManager()的方法获得。
    2. 获得findFragmentById(这个方法等同于activity里的findviewbyid)。
    3. 然后将fragment加入FragmentManager的Transaction中。
    4. 在FragmentManager里以key, fragment的方式类似Map方式保存。

     在Fragment的代码里OnCreate实现参数的初始化:

    public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            this.mCrime = new Crime();
        }

     在OnCreateView方法中实现功能:

            View v = inflater.inflate(R.layout.fragment_crime, container, false);
            this.mTitleFiled = (EditText)v.findViewById(R.id.crime_title);
            this.mTitleFiled.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    /**
                     * 文本变化自动填充Crime类
                     */
                    mCrime.setTitle(s.toString());
                }
    
                @Override
                public void afterTextChanged(Editable s) {
    
                }
            });
            this.mDateButton = (Button)v.findViewById(R.id.crime_date);
            this.mDateButton.setText(MyDateUtil.getDateStr(mCrime.getDate(), null));
            this.mDateButton.setEnabled(false);
            this.mSolvedCheckBox = (CheckBox)v.findViewById(R.id.crime_solved);
            this.mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    CrimeFragment.this.mCrime.setSolved(isChecked);
                }
            });
    
            return v;
    获得View对象,这里不是Activity,不能直接调用,先获取View对象,再用View对象调用
    View v = inflater.inflate(R.layout.fragment_crime, container, false);
    然后像在Activity中初始化各个组件及相关Listener
    this.mTitleFiled = (EditText)v.findViewById(R.id.crime_title);
    this.mTitleFiled.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    /**
    * 文本变化自动填充Crime类
    */
    mCrime.setTitle(s.toString());
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
    });
    最后将View返回,供Activity使用。
    return v;
  • 相关阅读:
    Http Get Post put delete
    YII AR查询方法
    YII CJson类
    Yii 配置文件
    linux大文件分割 split命令
    chrome插件 postman插件 接口测试、API & HTTP 请求调试工具
    Yii 实现restful
    restful理解
    how tomcat works 读书笔记(一)----------一个简单的webserver
    HDU2206 IP的计算 【经典题】
  • 原文地址:https://www.cnblogs.com/aocshallo1/p/12462801.html
Copyright © 2011-2022 走看看