SQLの窓

2017年09月23日


ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』

この内容は、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の最新記事】
posted by lightbox at 2017-09-23 15:07 | Comment(0) | 2017 Android Studio | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり