package com.example.wordbook; import java.io.File; import java.io.FilenameFilter; import java.io.Serializable; import java.text.MessageFormat; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.example.wordbook.Eula.OnEulaAgreedTo; import com.example.wordbook.common.Common; import com.example.wordbook.common.DBAccess; import com.example.wordbook.common.Message; import com.example.wordbook.task.AsyncTaskBase.OnAsyncTaskFinished; import com.example.wordbook.task.AsyncTaskClear; import com.example.wordbook.task.AsyncTaskDelete; import com.example.wordbook.task.AsyncTaskExport; import com.example.wordbook.task.AsyncTaskImport; /** * メイン画面クラス */ public class MainActivity extends Activity implements OnAsyncTaskFinished, OnEulaAgreedTo { /** TAG */ private static final String TAG = MainActivity.class.getSimpleName(); /** タイトル編集ダイアログ */ private static final int DIALOG_EDIT_TITLE = 0; /** Import選択ダイアログ */ private static final int DIALOG_SELECT_IMPORT = 11; /** Export選択ダイアログ */ private static final int DIALOG_SELECT_EXPORT = 12; /** Clear選択ダイアログ */ private static final int DIALOG_SELECT_CLEAR = 13; /** Delete選択ダイアログ */ private static final int DIALOG_SELECT_DELETE = 14; /** インスタンス状態用単語帳情報位置キー */ private static final String IS_POS = "pos"; /** インスタンス状態用単語帳情報リストキー */ private static final String IS_MAIN = "main"; /** 詳細画面リクエストコード */ private static final int ACTIVITY_DETAIL = 1; /** 四択画面リクエストコード */ private static final int ACTIVITY_CHOICE = 2; /** 一覧画面リクエストコード */ private static final int ACTIVITY_SIMPLE = 3; /** 設定画面リクエストコード */ private static final int ACTIVITY_PREF = 4; /** 単語帳DB問題集入力タスク */ private static AsyncTaskImport mTaskImport = null; /** 単語帳DB問題集出力タスク */ private static AsyncTaskExport mTaskExport = null; /** 単語帳DB成績クリアタスク */ private static AsyncTaskClear mTaskClear = null; /** 単語帳DB問題集削除タスク */ private static AsyncTaskDelete mTaskDelete = null; /** 試験形式 */ private int mType; /** 単語帳情報位置 */ private int mPos; /** 単語帳情報リスト */ private List> mMain; /** ハンドル領域タッチ状態 */ private boolean mDragFlag; /** ドラッグ中オブジェクト */ private Map mDragData; /** ListView */ private ListView mListView; /* * (非 Javadoc) * * @see android.app.Activity#onCreate(android.os.Bundle) */ @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate()"); // EULA表示 Eula.show(this); // 状態復帰 if (savedInstanceState != null) { mPos = savedInstanceState.getInt(IS_POS); mMain = (List>) savedInstanceState .getSerializable(IS_MAIN); } else { mPos = 0; mMain = Common.getWordbookPrefList(getApplicationContext()); // 単語帳情報リスト順序設定 Common.setPrefListOrder(getApplicationContext(), mMain); } Log.d(TAG, "pos=" + mPos + "/main=" + mMain.size()); // 設定取得 mType = Common.getType(getApplicationContext()); // レイアウト設定 setContentView(R.layout.main); // データ無しメッセージ設定 TextView empty = (TextView) findViewById(R.id.empty); String msg = MessageFormat.format(getString(R.string.msg_nodata_main), new Object[] { Common.WORDBOOK_DIRECTORY }); empty.setText(msg); // ListView設定 mListView = (ListView) findViewById(R.id.list); mListView.setEmptyView(empty); // アダプタ設定 final MainAdapter adp = new MainAdapter(this, mMain, R.layout.list_main, new String[] { Common.WORDBOOK_TITLE, Common.WORDBOOK_VALUE }, new int[] { android.R.id.text1, android.R.id.text2 }); mListView.setAdapter(adp); // クリック用イベントリスナ設定 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { doItemClick(parent, position, id); } }); // ロングクリック用イベントリスナ設定 mListView .setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { return doItemLongClick(parent, position, id); } }); // タッチ用イベントリスナ設定 mListView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { return doItemTouch(event); } }); // アイコン用イベントリスナ設定 final ImageView img1 = (ImageView) findViewById(R.id.imageViewImport); img1.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(View view) { showDialog(DIALOG_SELECT_IMPORT); } }); final ImageView img2 = (ImageView) findViewById(R.id.imageViewExport); img2.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(View view) { showDialog(DIALOG_SELECT_EXPORT); } }); final ImageView img3 = (ImageView) findViewById(R.id.imageViewClear); img3.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(View view) { showDialog(DIALOG_SELECT_CLEAR); } }); final ImageView img4 = (ImageView) findViewById(R.id.imageViewDelete); img4.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(View view) { showDialog(DIALOG_SELECT_DELETE); } }); } /* * (非 Javadoc) * * @see android.app.Activity#onResume() */ @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume()"); // 単語帳DB問題集入力タスク用ダイアログ復帰 if (mTaskImport != null && mTaskImport.getStatus() == AsyncTask.Status.RUNNING) { mTaskImport.showDialog(this); } // 単語帳DB問題集出力タスク用ダイアログ復帰 if (mTaskExport != null && mTaskExport.getStatus() == AsyncTask.Status.RUNNING) { mTaskExport.showDialog(this); } // 単語帳DB成績クリアタスク用ダイアログ復帰 if (mTaskClear != null && mTaskClear.getStatus() == AsyncTask.Status.RUNNING) { mTaskClear.showDialog(this); } // 単語帳DB問題集削除タスク用ダイアログ復帰 if (mTaskDelete != null && mTaskDelete.getStatus() == AsyncTask.Status.RUNNING) { mTaskDelete.showDialog(this); } } /* * (非 Javadoc) * * @see android.app.Activity#onPause() */ @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause()"); // 単語帳DB問題集入力タスク用ダイアログ除去 if (mTaskImport != null && mTaskImport.getStatus() == AsyncTask.Status.RUNNING) { mTaskImport.dismissDialog(); } // 単語帳DB問題集出力タスク用ダイアログ除去 if (mTaskExport != null && mTaskExport.getStatus() == AsyncTask.Status.RUNNING) { mTaskExport.dismissDialog(); } // 単語帳DB成績クリアタスク用ダイアログ除去 if (mTaskClear != null && mTaskClear.getStatus() == AsyncTask.Status.RUNNING) { mTaskClear.dismissDialog(); } // 単語帳DB問題集削除タスク用ダイアログ除去 if (mTaskDelete != null && mTaskDelete.getStatus() == AsyncTask.Status.RUNNING) { mTaskDelete.dismissDialog(); } } /* * (非 Javadoc) * * @see android.app.Activity#onSaveInstanceState(android.os.Bundle) */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.d(TAG, "onSaveInstanceState()"); // 状態保存 outState.putInt(IS_POS, mPos); outState.putSerializable(IS_MAIN, (Serializable) mMain); } /* * (非 Javadoc) * * @see android.app.Activity#onCreateDialog(int) */ @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_EDIT_TITLE: // タイトル編集ダイアログ生成 return getDialogTitle(); case DIALOG_SELECT_IMPORT: // Import選択ダイアログ生成 return getDialogImport(); case DIALOG_SELECT_EXPORT: // Export選択ダイアログ生成 return getDialogExport(); case DIALOG_SELECT_CLEAR: // Clear選択ダイアログ生成 return getDialogClear(); case DIALOG_SELECT_DELETE: // Delete選択ダイアログ生成 return getDialogDelete(); default: Log.w(TAG, "onCreateDialog() id=" + id); return null; } } /* * (非 Javadoc) * * @see android.app.Activity#onPrepareDialog(int, android.app.Dialog) */ @Override protected void onPrepareDialog(int id, Dialog dialog) { switch (id) { case DIALOG_EDIT_TITLE: // タイトル編集ダイアログ準備 setDialogTitle(dialog); break; case DIALOG_SELECT_IMPORT: // Import選択ダイアログ準備 // 処理無し break; case DIALOG_SELECT_EXPORT: // Export選択ダイアログ準備 // 処理無し break; case DIALOG_SELECT_CLEAR: // Clear選択ダイアログ準備 // 処理無し break; case DIALOG_SELECT_DELETE: // Delete選択ダイアログ準備 // 処理無し break; default: Log.w(TAG, "onPrepareDialog() id=" + id); break; } } /* * (非 Javadoc) * * @see android.app.Activity#onActivityResult(int, int, * android.content.Intent) */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult()"); // 遷移元アクティビティ識別 switch (requestCode) { case ACTIVITY_DETAIL: // break; case ACTIVITY_CHOICE: // 単語帳情報更新必要 Bundle ext = data.getExtras(); if (ext != null) { saveResult(ext.getInt(Common.INTENT_INDEX), ext.getInt(Common.INTENT_BASE)); } break; case ACTIVITY_SIMPLE: // 単語帳情報更新不要 break; case ACTIVITY_PREF: // 設定画面から戻った後はメイン画面で必要な情報を更新すること // 試験形式更新 mType = Common.getType(getApplicationContext()); // 単語帳情報リスト一括更新(管理画面修正処理対応) updateWordbookPrefList(); break; default: Log.w(TAG, "onActivityResult() code=" + requestCode); break; } } /* * (非 Javadoc) * * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } /* * (非 Javadoc) * * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem) */ @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.menu_search: onSearchRequested(); break; case R.id.menu_settings: startActivityForResult(new Intent(getApplicationContext(), PrefActivity.class), ACTIVITY_PREF); break; case R.id.menu_help: startActivity(new Intent(getApplicationContext(), HelpActivity.class)); break; default: Log.w(TAG, "onMenuItemSelected() id=" + id); break; } return true; } /* * (非 Javadoc) * * @see AsyncTaskBase.OnAsyncTaskFinished#onAsyncTaskFinished() */ @Override public void onAsyncTaskFinished() { Log.d(TAG, "onAsyncTaskFinished()"); // 設定ファイル更新 Common.modPrefListOrder(getApplicationContext(), mMain); // 単語帳情報リスト一括更新(メイン画面DB処理対応) updateWordbookPrefList(); } /* * (非 Javadoc) * * @see Eula.OnEulaAgreedTo#onEulaAgreedTo() */ @Override public void onEulaAgreedTo() { Log.d(TAG, "onEulaAgreedTo()"); } /** * 単語帳情報リスト一括更新 */ private void updateWordbookPrefList() { List> list = Common .getWordbookPrefList(getApplicationContext()); // 単語帳情報リスト順序設定 Common.setPrefListOrder(getApplicationContext(), list); mMain.clear(); mMain.addAll(list); // 単語帳情報リスト反映 ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); } /** * タイトル編集ダイアログ生成 * * @return タイトル編集ダイアログ */ private AlertDialog getDialogTitle() { // ダイアログ生成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); builder.setTitle(getString(R.string.title_editdialog)); // インフレート対象にダイアログ用テーマを反映 LayoutInflater inflater = builder.create().getLayoutInflater(); View view = inflater.inflate(R.layout.dlg_edit, null); // ビュー取得 final EditText edit = (EditText) view.findViewById(R.id.editText); // イベントリスナ設定 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int index = (Integer) mMain.get(mPos).get( Common.WORDBOOK_INDEX); String title = Common.normWordbookPrefTitle(mMain, edit .getText().toString()); // 設定ファイル更新 Common.modWordbookPref(getApplicationContext(), index, title, null, -1); // 単語帳情報リスト更新 mMain.get(mPos).put(Common.WORDBOOK_TITLE, title); // 単語帳情報リスト反映 ((BaseAdapter) mListView.getAdapter()) .notifyDataSetChanged(); } }); builder.setNegativeButton(android.R.string.cancel, null); builder.setView(view); return builder.create(); } /** * Import選択ダイアログ生成 * * @return Import選択ダイアログ */ private AlertDialog getDialogImport() { // リスト生成 final String[] file = getFileArray(); if (file.length == 0) { return null; } // ダイアログ生成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); builder.setTitle(getString(R.string.title_import)); // イベントリスナ設定 builder.setSingleChoiceItems(file, -1, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { // ダイアログ削除 removeDialog(DIALOG_SELECT_IMPORT); // タスク生成 mTaskImport = new AsyncTaskImport(MainActivity.this, true); mTaskImport.execute(file[which]); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { // ダイアログ削除 removeDialog(DIALOG_SELECT_IMPORT); } }); return builder.create(); } /** * Export選択ダイアログ生成 * * @return Export選択ダイアログ */ private AlertDialog getDialogExport() { // リスト生成 final String[] data = getDataArray(); if (data.length == 0) { return null; } // ダイアログ生成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); builder.setTitle(getString(R.string.title_export)); // イベントリスナ設定 builder.setSingleChoiceItems(data, -1, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { // ダイアログ削除 removeDialog(DIALOG_SELECT_EXPORT); // タスク生成 mTaskExport = new AsyncTaskExport(MainActivity.this, true); mTaskExport.execute(data[which]); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { // ダイアログ削除 removeDialog(DIALOG_SELECT_EXPORT); } }); return builder.create(); } /** * Clear選択ダイアログ生成 * * @return Clear選択ダイアログ */ private AlertDialog getDialogClear() { // リスト生成 final String[] data = getDataArray(); if (data.length == 0) { return null; } // ダイアログ生成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); builder.setTitle(getString(R.string.title_clear)); // イベントリスナ設定 final boolean[] select = new boolean[data.length]; builder.setSingleChoiceItems(data, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { select[which] = true; } }); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { for (int i = 0; i < select.length; i++) { if (select[i]) { // ダイアログ削除 removeDialog(DIALOG_SELECT_CLEAR); // タスク生成 mTaskClear = new AsyncTaskClear( MainActivity.this, false); mTaskClear.execute(data[i]); break; } } } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { // ダイアログ削除 removeDialog(DIALOG_SELECT_CLEAR); } }); return builder.create(); } /** * Delete選択ダイアログ生成 * * @return Delete選択ダイアログ */ private AlertDialog getDialogDelete() { // リスト生成 final String[] data = getDataArray(); if (data.length == 0) { return null; } // ダイアログ生成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); builder.setTitle(getString(R.string.title_delete)); // イベントリスナ設定 final boolean[] select = new boolean[data.length]; builder.setSingleChoiceItems(data, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { select[which] = true; } }); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { for (int i = 0; i < select.length; i++) { if (select[i]) { // ダイアログ削除 removeDialog(DIALOG_SELECT_DELETE); // タスク生成 mTaskDelete = new AsyncTaskDelete( MainActivity.this, false); mTaskDelete.execute(data[i]); break; } } } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @SuppressWarnings("deprecation") @Override public void onClick(DialogInterface dialog, int which) { // ダイアログ削除 removeDialog(DIALOG_SELECT_DELETE); } }); return builder.create(); } /** * タイトル編集ダイアログ準備 * * @param dialog * タイトル編集ダイアログ */ private void setDialogTitle(Dialog dialog) { // 現状 タイトル設定 EditText edit = (EditText) dialog.findViewById(R.id.editText); edit.setText(mMain.get(mPos).get(Common.WORDBOOK_TITLE).toString()); } /** * アイテムクリック処理 * * @param parent * AdapterView * @param position * Position * @param id * ID */ private void doItemClick(AdapterView parent, int position, long id) { Log.d(TAG, "doItemClick() id=" + id); // 単語帳情報更新タスク動作時は処理無し if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) { Log.w(TAG, "doItemClick()=RUNNING"); return; } // クリック領域識別(ハンドル) if (id < 0) { // アダプタからタッチイベントを送信できないためIDで識別 if (id == Common.ITEM_TOUCH) { // ダウン&ドラッグ開始 mPos = -1; mDragFlag = true; mDragData = mMain.get(position); mDragData.put(Common.WORDBOOK_HL, true); ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); } else { Log.w(TAG, "doItemClick() id=" + id); } } else { // 選択アイテム位置保存 mPos = position; int index = (Integer) mMain.get(position) .get(Common.WORDBOOK_INDEX); int count = (Integer) mMain.get(position) .get(Common.WORDBOOK_COUNT); int base = (Integer) mMain.get(position).get(Common.WORDBOOK_BASE); String title = mMain.get(position).get(Common.WORDBOOK_TITLE) .toString(); Intent intent; // 遷移先アクティビティ識別 switch (mType) { case 0: // 詳細 intent = new Intent(getApplicationContext(), DetailActivity.class); intent.putExtra(Common.INTENT_INDEX, index); intent.putExtra(Common.INTENT_COUNT, count); intent.putExtra(Common.INTENT_BASE, base); intent.putExtra(Common.INTENT_TITLE, title); startActivityForResult(intent, ACTIVITY_DETAIL); // overridePendingTransition(0, 0); break; case 1: // 四択 intent = new Intent(getApplicationContext(), ChoiceActivity.class); intent.putExtra(Common.INTENT_INDEX, index); intent.putExtra(Common.INTENT_COUNT, count); intent.putExtra(Common.INTENT_BASE, base); intent.putExtra(Common.INTENT_TITLE, title); startActivityForResult(intent, ACTIVITY_CHOICE); // overridePendingTransition(0, 0); break; case 2: // 一覧 intent = new Intent(getApplicationContext(), WBListActivity.class); intent.putExtra(Common.INTENT_INDEX, index); intent.putExtra(Common.INTENT_COUNT, count); intent.putExtra(Common.INTENT_TITLE, title); startActivityForResult(intent, ACTIVITY_SIMPLE); // overridePendingTransition(0, 0); break; default: Log.w(TAG, "doItemClick() type=" + mType); break; } } } /** * アイテムロングクリック処理 * * @param parent * AdapterView * @param position * Position * @param id * ID * @return イベント消費結果 */ @SuppressWarnings("deprecation") private boolean doItemLongClick(AdapterView parent, int position, long id) { Log.d(TAG, "doItemLongClick() id=" + id); // 単語帳情報更新タスク動作時は処理無し if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) { Log.w(TAG, "doItemLongClick()=RUNNING"); return true; } // 選択アイテム位置保存 mPos = position; // タイトル編集ダイアログ表示 showDialog(DIALOG_EDIT_TITLE); return true; } /** * アイテムタッチ処理 * * @param event * MotionEvent * @return イベント消費結果 */ private boolean doItemTouch(MotionEvent event) { Log.v(TAG, "doItemTouch() event=" + event); // ハンドル領域ドラッグ中以外は処理無し if (!mDragFlag) { return false; } // ドラッグによるアイテム位置の入れ替え switch (event.getAction()) { case MotionEvent.ACTION_MOVE: // 位置算出 int pos = mListView.pointToPosition((int) event.getX(), (int) event.getY()); if (pos == AdapterView.INVALID_POSITION) { Log.w(TAG, "doItemTouch() pos=" + pos); break; } // 入れ替え if (pos != mPos) { mPos = pos; mMain.remove(mDragData); mMain.add(mPos, mDragData); ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); } return true; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_OUTSIDE: // アップ&ドラッグ終了 mPos = -1; mDragFlag = false; mDragData.put(Common.WORDBOOK_HL, false); mDragData = null; ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); // 設定ファイル更新 Common.modPrefListOrder(getApplicationContext(), mMain); return true; case MotionEvent.ACTION_DOWN: // アダプタ側で処理済み break; default: // その他は処理無し break; } return false; } /** * 検索フィルタ定義クラス */ private static class WBFilenameFilter implements FilenameFilter { @Override public boolean accept(File dir, String name) { // 拡張子でフィルタ return name.endsWith(Common.WORDBOOK_EXT); } }; /** * ファイル名リスト生成 * * @return ファイル名リスト */ private String[] getFileArray() { final WBFilenameFilter filter = new WBFilenameFilter(); String[] array = new File(Common.WORDBOOK_DIRECTORY).list(filter); if (array == null) { array = new String[0]; } // 存在しない場合はエラー表示 if (array.length == 0) { Message.show(getApplicationContext(), Message.ID.FILE_NOT_FOUND); } return array; } /** * データタイトルリスト生成 * * @return データタイトルリスト */ private String[] getDataArray() { int size = mMain.size(); String[] array = new String[size]; for (int i = 0; i < size; i++) { array[i] = mMain.get(i).get(Common.WORDBOOK_TITLE).toString(); } // 存在しない場合はエラー表示 if (array.length == 0) { Message.show(getApplicationContext(), Message.ID.DATA_NOT_FOUND); } return array; } /** 単語帳情報更新タスク */ private AsyncTask mTask = null; /** * 単語帳情報更新タスク呼び出し * * @param index * インデックス * @param base * 試験データ先頭 */ private void saveResult(final int index, final int base) { // 単語帳情報更新タスク動作時は処理無し if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) { Log.w(TAG, "saveResult()=RUNNING"); return; } // 単語帳情報更新タスク実行 mTask = new AsyncTask() { @Override protected void onPreExecute() { super.onPreExecute(); Log.d(TAG, "onPreExecute()"); // 単語帳情報リスト更新 mMain.get(mPos).put(Common.WORDBOOK_VALUE, getString(R.string.label_processing)); // 単語帳情報リスト反映 ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); } @Override protected void onPostExecute(int[] result) { // 単語帳情報コメント生成 String value = Common.makeWordbookPrefValue( getApplicationContext(), result); // 単語帳情報リスト更新 Map item = mMain.get(mPos); item.put(Common.WORDBOOK_VALUE, value); item.put(Common.WORDBOOK_BASE, base); item.put(Common.WORDBOOK_ZERO, result[1]); item.put(Common.WORDBOOK_OK, result[2]); item.put(Common.WORDBOOK_NG, result[3]); // 単語帳情報リスト反映 ((BaseAdapter) mListView.getAdapter()).notifyDataSetChanged(); Log.d(TAG, "onPostExecute()=" + result[0] + "/" + result[1] + "/" + result[2] + "/" + result[3]); super.onPostExecute(result); } @Override protected int[] doInBackground(Void... params) { Log.d(TAG, "doInBackground()=" + index + "/" + base); // 設定ファイル更新 int[] info = DBAccess.getDBInfo(getApplicationContext(), index); Common.modWordbookPref(getApplicationContext(), index, null, info, base); return info; }; }.execute(); } }