(代码)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的内部实现机制。