Android 学习之《Android编程权威指南》第二版 代码+笔记整理(五)

(代码)CriminalIntent初步开发

不展示编译器自动完成的代码,仅提供手动修改或者编写的代码。

一、需求分析

该应用可以详细记录种种办公室陋习,能记录陋习的标题,日期及照片,也支持在联系人中查找当事人,通过其它应用提出抗议。

二、组成

Android 学习之《Android编程权威指南》第二版 代码+笔记整理(五)_第1张图片
本篇博客还涉及strings.xml

二、界面

Android 学习之《Android编程权威指南》第二版 代码+笔记整理(五)_第2张图片

三、开发

1. Crime.java (模型类)

import java.util.UUID;

public class Crime {
    private UUID mId;
    private String mTitle;

    public Crime(){
        mId = UUID.randomUUID();
    }

    public UUID getId() {
        return mId;
    }

    public String getTitle() {
        return mTitle;
    }

    public void setTitle(String title) {
        mTitle = title;
    }
}

2. CrimeFragment.java(UI Fragment,Controller)

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class CrimeFragment extends Fragment {

    private Crime mCrime; //陋习模型类
    private EditText mTitleField; //陋习标题输入框

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

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_crime,container,false);

        //获取文本输入框控件,并设置监听事件
        mTitleField = (EditText)v.findViewById(R.id.crime_title);
        mTitleField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            	//CharSequence代表用户的输入
                mCrime.setTitle(charSequence.toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
        return v;
    }
}

3. CrimeActivity.java(托管CrimeFragment实例,Controller)

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;

public class CrimeActivity extends FragmentActivity {

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

        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.fragment_container);
        if (fragment == null){
            fragment = new CrimeFragment();
            fm.beginTransaction()
                    .add(R.id.fragment_container,fragment)
                    .commit();
        }
    }
}

4. activity_crime.xml (容器布局,View)


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".CrimeActivity">

FrameLayout>

5. fragment_crime.xml (UI Fragment布局,View)


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

    <EditText
        android:id="@+id/crime_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/crime_title_hint"/>
LinearLayout>

6. strings.xml(资源文件)

<resources>
    <string name="app_name">CriminalIntentstring>
    <string name="crime_title_hint">请输入陋习标题string>
resources>

(笔记)第7章 UI fragment与fragment管理器

  1. 管理用户界面的fragment又称为UI fragment。
  2. 用activity托管fragment实例,托管:activity在其视图层级里提供一处位置用来放置fragment的视图。
  3. Gradle依赖项字符串使用Maven坐标模式:groupId:artifactId:version (类库基础包名:包中特定库名:类库的版本号),其中特定库名,Google使用basename-vX模式作为支持库的命名约定,-vX指所支持的最低API级别。
  4. UUID类:UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
  5. fragment的生命周期方法是由托管activity而不是操作系统调用。
  6. 托管UI fragment的两种方式,即《第一行代码》中动态与静态添加碎片。
  7. fragment事务被用来添加、移除、附加、分离或替换fragment队列中的fragment。这是使用fragment在运行时组装和重新组装用户界面的关键。FragmentManager管理着fragment事务回退栈。
  8. 使用容器视图资源ID去识别UI fragment是FragmentManager的内部实现机制。

你可能感兴趣的:(Android,《Android编程权威指南》)