仕様
状態:確認中
閲覧数:1,238
投稿日:2013-09-19
更新日:2013-10-09
アプリ起動時の初期画面 … ▼/ActivityTop.java
・現在月の日記の一覧を表示
・一覧からタップされたレコードの参照画面に遷移
・今日の日記を追加ボタンで新規登録画面に遷移
・先月ボタンで一ヶ月前の一覧を表示
・翌月ボタンで一ヶ月後の一覧を表示
・検索文字を入力して検索ボタンで検索文字を含む一覧を表示
・現在月の日記の一覧を表示
・一覧からタップされたレコードの参照画面に遷移
・今日の日記を追加ボタンで新規登録画面に遷移
・先月ボタンで一ヶ月前の一覧を表示
・翌月ボタンで一ヶ月後の一覧を表示
・検索文字を入力して検索ボタンで検索文字を含む一覧を表示
処理の流れ
プログラムの流れ
1.プロパティ
・リソースを割り当てる為の変数を宣言
2.onCreateメソッド
2-1.レイアウトファイルを指定
2-2.変数にコンテキスト上にあるリソースを割り当てる
2-3.Listenerを登録して動作をプログラム
3.onResumeメソッド
・データベースへアクセスし、一覧データの取得と表示を行う
4.アクティビティ
・「実行中」の状態になる
※アクティビティ「実行中」=そのアクティビティの「onResumeメソッド」処理は既に終了している
「アクティビティが開始」するとAndroid側は予め定義されている「onCreate()」メソッド、「onStart()」メソッド、「onResume()」メソッドを順番に呼び出し、その中でActivityの画面が作成表示され、「実行中」の状態になる
1.プロパティ
2.onCreateメソッド
2-1.レイアウトファイルを指定
レイアウトファイル指定
setContentView(R.layout.top);
・これ以降のコード内容を、「▼/res/layout/top.xml」へセット
2-2.リソースを割り当て
変数にコンテキスト上にあるリソースを割り当てる
/* どのItemを操作するのかリソースを割り当て */
tv_last = (TextView)findViewById(R.id.TextView_last_month);//先月
tv_date = (TextView)findViewById(R.id.TextView_date);//2013/9
tv_next = (TextView)findViewById(R.id.TextView_next_month);//翌月
et_search = (EditText)findViewById(R.id.EditText_top_search);//編集
btn_top_search = (Button)findViewById(R.id.Button_top_search);//検索
btn_top_add = (Button)findViewById(R.id.Button_top_add);//今日の日記を書く
all = (LinearLayout)findViewById(R.id.LinearLayout_all);//画面全体LinearLayout
listView = (ListView)findViewById( R.id.ListView_searchlist );//フッター検索部分リストビュー
1-2.ArrayAdapter
1.ジェネリックな型変数を宣言
プロパティにて、ジェネリックな型の変数を宣言
/* 一覧表示用ListView */
private ListView listView = null;
private ArrayAdapter<RecordItem> arrayAdapter = null;
・private ArrayAdapter<RecordItem>のRecordItemは「仮型引数」と呼ばれる
2-2.データ表示領域を用意
・listデータ表示領域を取得
listView = (ListView)findViewById( R.id.ListView_searchlist );//フッター検索部分リストビュー
2-3.オブジェクト生成
ArrayAdapterクラスのオブジェクト生成
arrayAdapter = new ArrayAdapter<RecordItem>(this,R.layout.listview);
listView.setAdapter(arrayAdapter);
・newする際の「new ArrayAdapter<RecordItem>();」
・この<RecordItem>が、型変数宣言したArrayAdapter型の「型変数RecordItem」にバインドされる
・new ArrayAdapter<RecordItem>のRecordItemは「実型引数」と呼ばれる
・型変数へのバインド
※この時点でデータの中身は空。実際に取得するのは、これ以降
3.onResumeメソッド
AsyncTask
・比較的重たい処理となる「データベース問い合わせ、一覧データ取得・表示」は、メインスレッド(UI thread)に負荷を与えずに行うため、AsyncTaskクラスを継承した「DataLoadTask」クラスで実施
3-1.AsyncTaskクラス作成
AsyncTaskクラスを継承したクラスを作成
・Generics指定(引数の型を指定)
public class DataLoadTask extends AsyncTask<Object, Integer, List<RecordItem>> {
第1引数(実行時引数) … Object
・java.lang.Object
第2引数(進捗単位) … Integer
・java.lang.Integer
第3引数(処理結果) … List<RecordItem>
・java.util.List<android.style.systemdb.RecordItem>
3-2.メソッド実装
doInBackground … メイン処理(=バックグラウンドで非同期に実行させたい処理)]
・「データベース操作クラス」のインスタンス生成
・「データベース操作クラス」の検索メソッド実行
・検索結果を返す
@Override
protected List<RecordItem> doInBackground(Object... params) {
/* 一覧を呼び出し */
RecordDaoItem dao = new RecordDaoItem(ActivityTop.this);
return dao.list_search_item( Record ,isWordSearch );
}
onPostExecute … スレッドが終了した後に呼ばれる
※引数resultは、先のdoInBackground()でreturnしたオブジェクト。ここでは検索結果一覧
protected void onPostExecute(List<RecordItem> result) {
・表示日付を更新
・現在の一覧表示をクリア
arrayAdapter.clear();
・一覧表示のデータ設定 … 検索結果を、拡張for文を利用して、arrayAdapterインスタンスに追加
/* 一覧表示のデータを設定 */
for (RecordItem item : result) {
arrayAdapter.add(item);
if( item.getItemNen().equals(String.valueOf(year))
&& item.getItemTuki().equals(String.valueOf(month))
&& item.getItemHi().equals(String.valueOf(day)) ){
btn_top_add.setVisibility(View.GONE);
}
}