Android 學習之《Android編程權威指南》第二版 代碼+筆記整理(五)

(代碼)CriminalIntent初步開發

不展示編譯器自動完成的代碼,僅提供手動修改或者編寫的代碼。

一、需求分析

該應用可以詳細記錄種種辦公室陋習,能記錄陋習的標題,日期及照片,也支持在聯繫人中查找當事人,通過其它應用提出抗議。

二、組成

組成
本篇博客還涉及strings.xml

二、界面

界面

三、開發

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)

<?xml version="1.0" encoding="utf-8"?>
<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)

<?xml version="1.0" encoding="utf-8"?>
<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">CriminalIntent</string>
    <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的內部實現機制。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章