Android開發之CriminalIntent項目開發(其一)
前言
這次的開發項目是一個叫做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項目開發(其一)