1. 程式人生 > >Android開發之CriminalIntent項目開發(其一)

Android開發之CriminalIntent項目開發(其一)

開發項目 1.0 enc 增加 委派 其他 date 應用 module

前言

  這次的開發項目是一個叫做CriminalIntent的應用,該應用可以詳細記錄各種辦公室陋習。這個應用記載的陋習記錄包括標題、日期和圖片,支持在聯系人中查找當事人,通過E-mail、Twitter、Facebook或者其他的一些社交應用提出抗議。

引入fragment

  采用fragment而不是activity來管理應用UI,可以繞開Android系統的activity使用規則的限制。

  fragment是一種控制器對象,activity可以委派它執行任務。這些任務通常就是管理用戶界面。受管的用戶界面可以是一整屏或者是整屏的一部分。

  根據應用和用戶的需求,可聯合使用fragment和activity來組裝或者重組用戶界面。在整個生命周期過程中,activity視圖還是那個視圖,因此不必擔心會違反Android系統的activity使用規則。

  如何支持同屏顯示列表與明細內容?實際上,這類應用的activity視圖由列表fragment和明細fragment組成。明細視圖負責顯示列表項的明細內容。選擇不同的列表項就顯示對應的明細視圖。activity負責以一個明細fragment替換另一個明細fragment。這樣,視圖切換的過程中,也不用銷毀activity。

開發CriminalIntent

  CriminalIntent項目的 開發比較復雜,所以得一步步來。

在Android Studio中增加依賴關系

  要使用的支持庫版fragment來自於AppCompat庫。要使用AppCompat支持庫,項目必須將其列入依賴關系。修改build.gradle文件。

apply plugin: ‘com.android.application‘

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        applicationId "classroom.criminalintent"
        minSdkVersion 9
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner 
"android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘ } } } dependencies { compile fileTree(dir: ‘libs‘, include: [‘*.jar‘]) androidTestCompile(‘com.android.support.test.espresso:espresso-core:2.2.2‘, { exclude group: ‘com.android.support‘, module: ‘support-annotations‘ }) compile ‘com.android.support:appcompat-v7:25.2.0‘ testCompile ‘junit:junit:4.12‘ compile ‘com.android.support:recyclerview-v7:25.2.0‘ compile ‘com.android.support:recyclerview-v7:25.2.0‘ compile ‘com.android.support.constraint:constraint-layout:1.0.2‘ }

創建Crime類

public class Crime {
    private UUID mId;
    private String mTitle;
    private Date mDate;
    private boolean mSolved;

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

    public UUID getmId() {
        return mId;
    }

    public String getmTitle() {
        return mTitle;
    }

    public void setmTitle(String mTitle) {
        this.mTitle = mTitle;
    }

    public Date getmDate() {
        return mDate;
    }

    public void setmDate(Date mDate) {
        this.mDate = mDate;
    }

    public boolean ismSolved() {
        return mSolved;
    }

    public void setmSolved(boolean mSolved) {
        this.mSolved = mSolved;
    }


}

創建CrimeFragment類

  創建new java class,並修改代碼。

public class CrimeFragment extends Fragment {
}

  註意,繼承Fragment類時,需要繼承Android.support.v4.app這個。這個才是支持庫版的Fragment。

import android.support.v4.app.Fragment;

升級CriminalIntent應用的模型層

  創建CrimeLab.java,並修改代碼。

    public Crime getCrime(UUID id) {
        for (Crime crime : mCrimes) {
            if (crime.getmId().equals(id)) {
                return crime;
            }
        }
        return null;
    }

  創建可容納Crime對象的List。

private List<Crime> mCrimes;
private CrimeLab(Context context) {
        mCrimes = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            Crime crime = new Crime();
            crime.setmTitle("Crime #" + i);
            crime.setmSolved(i % 2 == 0);//Every other one
            mCrimes.add(crime);
        }
    }

    public List<Crime> getCrimes() {
        return mCrimes;
    }

    public Crime getCrime(UUID id) {
        for (Crime crime : mCrimes) {
            if (crime.getmId().equals(id)) {
                return crime;
            }
        }
        return null;
    }

  其中,這部分代碼是用來生成100個crime的。

for (int i = 0; i < 100; i++) {
            Crime crime = new Crime();
            crime.setmTitle("Crime #" + i);
            crime.setmSolved(i % 2 == 0);//Every other one
            mCrimes.add(crime);
        }

使用布局與組件創建用戶界面

技術分享

  在上述圖中,可以對界面進行視圖化管理,相比在後臺一點點的累代碼,方便很多。

Android開發之CriminalIntent項目開發(其一)