標籤:sdk bool new lib ica gets 一點 日期 pre
前言
這次的開發項目是一個叫做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項目開發(其一)