忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/03/29 17:21 |
Android2.2 名刺管理アプリケーションを作ってみる5日目その7
http://codezine.jp/article/detail/4842?p=4

前回は名刺詳細画面から詳細編集画面への遷移を作成しました。
今回は詳細編集画面にインテントが送られてきたらその値をデフォルト表示するようにします。

実は名刺一覧画面からやってくる新規登録画面と、名刺詳細画面からやってくる詳細編集画面は同じです。
入力は単にインテントがあれば初期値にして、インテントがなければ空っぽのままにします。
問題は保存で、更新と新規登録を見極めなければなりません。
が、実は前BizCardDaoを作成したときに、bizCard.rowidがあれば更新、無ければ新規登録というふうにしていました。
つまりインテントからrowidを持ち回しておけば問題無いということです。

ということでRegistActivityを実装。
まずは新規/保存/削除を選択させるメニューを作成。

/res/menu/regist.xml
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 保存メニュー -->
    <item
        android:id="@+id/menu_save"
        android:title="@string/menu_save"
        android:icon="@android:drawable/ic_menu_save" />
    <!-- 削除メニュー -->
    <item
        android:id="@+id/menu_delete"
        android:title="@string/menu_delete"
        android:icon="@android:drawable/ic_menu_delete" />
</menu>

ただ、これは保存/削除メニューを一気に作ってるんだけど、この作りだと絶対に保存/削除は並べて表示するしかなくなります。
regist.xml以外に/res/menu/delete.xmlを作って削除メニューはそっちに持っていった方が自由度があるのではないだろうかと思った。
まあ普通保存と削除は並んでるだろうからまあいいか。

先に「保存しました」とかの文言を作成しておく。

/res/values/strings.xml
	<string name="saved">保存しました</string>
	<string name="confirm_delete">本当に削除しますか?</string>
	<string name="deleted">削除しました</string>
	<string name="error_required">必須項目を入力してください</string>

インテントがあればそこから値を取得し、なければ単に新規登録するようにRegistActivity.onCreate()を書き換えます。

/src/com.example.bizcard/RegistActivity.java
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.regist);

        // 部品の取得
        personNameText = (EditText)findViewById( R.id.personNameText);
        companyNameText = (EditText)findViewById( R.id.companyNameText);
        organizationNameText = (EditText)findViewById( R.id.organizationNameText);
        positionNameText = (EditText)findViewById( R.id.positionNameText);
        zipCodeText = (EditText)findViewById( R.id.zipCodeText);
        addressText = (EditText)findViewById( R.id.addressText);
        mapButton = (ImageButton)findViewById( R.id.mapButton);
        tel1Text = (EditText)findViewById( R.id.tel1Text);
        tel2Text = (EditText)findViewById( R.id.tel2Text);
        mailText = (EditText)findViewById( R.id.mailText);

        // ボタンにマップ表示用のリスナー追加
        mapButton.setOnClickListener( this);

        // インテントを取得
        bizCard = (BizCard)getIntent().getSerializableExtra( BizCard.TABLE_NAME);

        // インテントが見つかれば値を設定する
        if( bizCard != null){
            personNameText.setText( bizCard.getPersonName());
            companyNameText.setText( bizCard.getCompanyName());
            organizationNameText.setText( bizCard.getOrganizationName());
            positionNameText.setText( bizCard.getPositionName());
            zipCodeText.setText( bizCard.getZipCode());
            addressText.setText( bizCard.getAddress());
            tel1Text.setText( bizCard.getTel1());
            tel2Text.setText( bizCard.getTel2());
            mailText.setText( bizCard.getMail());
        }
    }

部品の割り当て毎回書いてるけど面倒だな・・・
なんかView.setTexts(R.layout.regist, bizCard)とか無いのか?

元記事ではIntent intent = getIntent();と一旦インテントをオブジェクト化してから突っ込んでいますが、使い回す必要がなければメソッドチェーンした方がインポートの必要もないし手っ取り早いです。
てか、前回のShowActivity.javaではそう書いてるんですがね。

どっちの書き方でも同じなので問題無いんですが、ひとつのアプリ内では書き方は揃えておいた方がいいと思う。

それ以外は単に/res/layout/regist.xmlから部品を特定し、インテントがあればその値を突っ込んでいるだけです。
幸いIntent.getSerializableExtra()は取得できなくても例外を吐いたりしないようです。

無事インテントが引き継がれるようになりました。


Androidの記事
PR


2010/09/06 22:51 | Comments(0) | TrackBack() | Android

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<XBOX360 メディアブリーフィング | HOME | PSNの問題は例のUSBが問題だったらしい>>
忍者ブログ[PR]