この内容は、ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』より続いています。Helper クラスはその名の通り、『お助けクラス』です。一般的には『標準化』の為の部品です。名称はなんでもいいですが、ここでは一般名として『Helper』と名乗っています。 通常、省略せずに画面まわりのコードを書こうとすると指定しているのは id だけなのに、やたらと長いコードを書くはめになります。また、アプリが完成してから眺めてみると、相当無駄が多いことも多くなります。 ここでは、まず最初からその無駄を省くための画面周りのメソッドを作成した Helper クラスをプロジェクトに追加します。 Helper クラスを作成すると、画面切り替えのテストは以下の MainActivity で行えます
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { public Helper helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); helper = new Helper(MainActivity.this); } // ******************************* // メニュー // ******************************* @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_1) { Log.i("lightbox","処理1"); helper.showFirstView(); return true; } if (id == R.id.action_2) { Log.i("lightbox","処理2"); helper.showInsertView(); return true; } return super.onOptionsItemSelected(item); } }
※ メニュー部分も省略したい場合は、MainActivity を継承したクラス( 例えば、MainControl )を作って、それをマニフェストで初期画面にするといいです。 Helper.java ※ コピペしやすいように、先頭のパッケージ部分を省いています とても単純なコードが並んでいます。これらは本来 MainActivity で記述していたものを引越ししただけのものです。なので、このプロジェクトでしか使えませんが、『標準化』のサンプルにはなると思います。 確認ダイアログ処理に関しても、MainActivity に書くと、『ただ確認したいだけで機能とは関係無い』のに、とても多くの行数を必要とします。ただ、処理的には、確認後の処理は MainActivity で記述したいので、OnDialogOkListener を作って使用しています。(ボタンのクリック処理と同じです) ※ 商品では無いので(テストしたいだけなので)、フラグメントとかも無しです
import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.ViewSwitcher; public class Helper { private MainActivity mainActivity; private ViewSwitcher viewSwitcher; // ******************************* // 確認ダイアログ用 // ******************************* private AlertDialog.Builder alertDialogBuilder; // ******************************* // 確認ダイアログ用インターフェイス // ******************************* public interface OnDialogOkListener { abstract public void onDialogOkListener(); } // ******************************* // コンストラクタ // ******************************* public Helper(MainActivity mainActivity) { this.mainActivity = mainActivity; this.viewSwitcher = (ViewSwitcher) mainActivity.findViewById(R.id.viewSwitcher); initSettings(); } // ******************************* // 初期処理 // ****************************** public void initSettings() { mainActivity.setTitle("社員一覧"); } // ******************************* // 確認ダイアログ処理 // ****************************** public void showDialog( String message, final OnDialogOkListener listener ) { Log.i("lightbox", "showDialog"); alertDialogBuilder = new AlertDialog.Builder(mainActivity); alertDialogBuilder.setTitle("確認"); alertDialogBuilder.setMessage(message); alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.i("lightbox", "OK"); listener.onDialogOkListener(); } }); alertDialogBuilder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { Log.i("lightbox", "CANCEL"); } }); // キャンセル可能 alertDialogBuilder.setCancelable(true); alertDialogBuilder.show(); } // ******************************* // 初期画面 // ******************************* public void showFirstView() { // コード表示部分の表示 Helper.this.getTextView(R.id.textViewCode).setVisibility(View.VISIBLE); // コード入力部分の非表示 Helper.this.getEditText(R.id.editTextCode).setVisibility(View.GONE); mainActivity.setTitle("社員一覧"); viewSwitcher.setDisplayedChild(0); } // ******************************* // 修正画面 // ******************************* public void showEditView() { // コード表示部分の表示 Helper.this.getTextView(R.id.textViewCode).setVisibility(View.VISIBLE); // コード入力部分の非表示 Helper.this.getEditText(R.id.editTextCode).setVisibility(View.GONE); mainActivity.setTitle("社員修正"); viewSwitcher.setDisplayedChild(1); } // ******************************* // 新規画面 // ******************************* public void showInsertView() { // コード表示部分の表示 Helper.this.getTextView(R.id.textViewCode).setVisibility(View.GONE); // コード入力部分の非表示 Helper.this.getEditText(R.id.editTextCode).setVisibility(View.VISIBLE); mainActivity.setTitle("社員登録"); Helper.this.setEditTextString(R.id.editTextCode,""); Helper.this.setEditTextString(R.id.editText1,""); Helper.this.setEditTextString(R.id.editText2,""); viewSwitcher.setDisplayedChild(1); } // ******************************* // EditText 取得 // ******************************* public EditText getEditText(int id) { return (EditText)mainActivity.findViewById(id); } // ******************************* // TextView 取得 // ******************************* public TextView getTextView(int id) { return (TextView)mainActivity.findViewById(id); } // ******************************* // TextView より値取得 // ******************************* public String getTextViewString(int id) { return ((TextView)mainActivity.findViewById(id)).getText().toString(); } // ******************************* // EditText より入力値取得 // ******************************* public String getEditTextString(int id) { return ((EditText)mainActivity.findViewById(id)).getText().toString(); } // ******************************* // EditText に値セット // ******************************* public void setEditTextString(int id,String text) { ((EditText)mainActivity.findViewById(id)).setText(text); } }
|
【2017 Android Studioの最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- Java : Class 構造より、update 文を作成する
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- Android Studio にインポートして使用する SQLite データベースを MDB より作成する VBScript
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の掲示板に投稿(POST)するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する
- Android Studio : エミュレータで Notification(通知)のテスト