(代碼)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管理器
- 管理用戶界面的fragment又稱爲UI fragment。
- 用activity託管fragment實例,託管:activity在其視圖層級裏提供一處位置用來放置fragment的視圖。
- Gradle依賴項字符串使用Maven座標模式:groupId:artifactId:version (類庫基礎包名:包中特定庫名:類庫的版本號),其中特定庫名,Google使用basename-vX模式作爲支持庫的命名約定,-vX指所支持的最低API級別。
- UUID類:UUID 是 通用唯一識別碼(Universally Unique Identifier)的縮寫,是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
- fragment的生命週期方法是由託管activity而不是操作系統調用。
- 託管UI fragment的兩種方式,即《第一行代碼》中動態與靜態添加碎片。
- fragment事務被用來添加、移除、附加、分離或替換fragment隊列中的fragment。這是使用fragment在運行時組裝和重新組裝用戶界面的關鍵。FragmentManager管理着fragment事務回退棧。
- 使用容器視圖資源ID去識別UI fragment是FragmentManager的內部實現機制。