機能追加検討
ええと、閲覧以外の機能、というナニについて ActionBar Hands-on な資料など確認しつつ検討してみることに。あ、Notepad Tutorial も参考にします。ここからが色々な意味でポイント高いというかどう纏めるか、がアレ。
順番てきに
- 新規にレコード追加
- 契機としては ActionBar に新規なボタンがあって云々
- レコード削除
- アイテム長押しで削除な Contextual ActionBar がナニ
- レコード修正
- アイテムをタップしたら (ry
なカンジなのかどうか。
基本的な CRUD 的 i/f があればそれを膨らませて云々、ってことも可能なはず。
なんとなく simplepaint なソレがもの凄く参考になりますね。ハンズオン的には完成版なプロジェクト参考にやってみよう、って手もありですね。あと、SDK なサンプルの NotePad も参考になる模様。
つうか、編集画面への遷移なソレってどうするべきなのかなぁ。
- 新規の場合は Intent.ACTION_INSERT を setAction する
- 修正の場合は Intent.ACTION_EDIT を setAction する
あと、修正の時は id とデータを putExtra で Intent に設定で良いのかな。でも
Intent i = new Intent(this, nextActivity.class); i.setAction(Intent.ACTION_INSERT);
みたいなカンジで良いのかどうか。あとは再表示用にデータを取得して表示する処理をリファクタした方が良いのか。
new Thread(new Runnable() { @Override public void run() { try { mList = new JSONArray(JSONFunctions.GETfromURL(BASE_URL + TASKS, mHttpClient)); } catch (Exception e) { Log.d(TAG, "e is " + e); } mHandler.post(new Data2List()); } }).start();
の run の中身を手続きにすれば良さげ。プロトタイプはその版にすれば良いのかな。
とりあえず
盛り込みつつ控えるべき何かがあれば追記の方向にて。
追記
む、よくよく考えたら UI なガワから盛り込んでいく、という手がありますね。そもそもサーバサイドとの i/f はできちゃってるので楽。
とりあえず、ActionBar からということで list_menu.xml として以下を res/menu 配下に投入。
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" android:showAsAction="ifRoom|withText" android:title="作成"> </item> <item android:id="@+id/delete" android:icon="@android:drawable/ic_menu_delete" android:showAsAction="ifRoom|withText" android:title="削除"> </item> </menu>
で、本体の onCreateOptionsMenu なナニを以下に、なのかな。
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.list_menu, menu); return true; }
アイコン二つ表示されているのを確認。次は onOptionsItemSelected の追加か。とりあえず以下で。
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.add: Toast.makeText(this, "add", Toast.LENGTH_LONG).show(); return true; case R.id.delete: Toast.makeText(this, "delete", Toast.LENGTH_LONG).show(); return true; default: return super.onOptionsItemSelected(item); } }
あと、Activity 作るの面倒なので (ぇ コンテキストなんちゃらなソレを盛り込んでおきます。とりあえずガワのみ追加。
MultiChoiceModeListener mActionModeCalback = new MultiChoiceModeListener() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { getMenuInflater().inflate(R.menu.list_action, menu); mode.setTitle("対象を選択"); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.delete: // アクションモード終了 mode.finish(); return true; default: return false; } }
次に onCreate で以下を追加か。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL); getListView().setMultiChoiceModeListener(mActionModeCalback);
あ、あと例の処理をメソドにすれば良いのかな。
updateList(); } private void updateList() { new Thread(new Runnable() { @Override public void run() { try { mList = new JSONArray(JSONFunctions.GETfromURL(BASE_URL + TASKS, mHttpClient)); } catch (Exception e) { Log.d(TAG, "e is " + e); } mHandler.post(new Data2List()); } }).start(); }
編集 Activity を作るリキが残っていたら追記します。
さらに
ええとデフォなレイアウトの res/layout/activity_main.xml を以下に修正。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".RoRClientActivity" > <EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="text" /> </RelativeLayout>
で、Activity を追加なのか。ガワのみ、ってことで以下。
package jp.shuri.yamanetoshi.rorapiclient; import android.app.Activity; import android.os.Bundle; public class RoRClientEdit extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
あ、あと AndroidManifest.xml に情報追加して
</activity> <activity android:name="jp.shuri.yamanetoshi.rorapiclient.RoRClientEdit" > </activity> </application>
メインな Activity に以下を盛り込んで
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.add: Toast.makeText(this, "add", Toast.LENGTH_LONG).show(); Intent i = new Intent(this, RoRClientEdit.class); i.setAction(Intent.ACTION_INSERT); startActivity(i);
実行したら一応動きましたね。編集 Activity にボタンが無いのが残念。リストの項目タップして編集画面に情報を引き継げれば mock は完成ですが今日はここで力尽きることにします。失礼します。