Android Studio : LiveDoor のお天気情報をリストビューに表示する手順 から続いている処理です Intent でデータを送れるように、クラスを変更 Serializable インタフェース を追加
import java.io.Serializable; public class WebData implements Serializable { String link; String name; @Override public String toString() { return name; } }
Activity を追加して画面作成
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Main2Activity"> <Button android:id="@+id/buttonReturn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="戻る" /> <TextView android:id="@+id/textViewLink" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:text="TextView" android:textSize="20sp"/> <TextView android:id="@+id/textViewName" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="6dp" android:text="TextView" android:textSize="30sp"/> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:textSize="30sp"/> <Button android:id="@+id/buttonUpdate" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="更新" android:textSize="20sp"/> </LinearLayout>
ListView に イベント処理を追加 選択した位置を保存する為に private int position; を定義
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 行データを取得 ArrayAdapter<WebData> arrayAdapter = (ArrayAdapter<WebData>) parent.getAdapter(); WebData webData = arrayAdapter.getItem(position); // 行データを次画面に渡す Intent intent = new Intent(MainActivity.this,Main2Activity.class); intent.putExtra("DATA",webData); MainActivity.this.startActivityForResult(intent, 101); // 選択した行を保存 MainActivity.this.position = position; } });
第二画面から戻って来た時の処理を追加 第二画面で変更された行データを使用して ListView を再表示する
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if ( requestCode == 101 ) { if ( resultCode == MainActivity.RESULT_OK ) { // ボタンの種類 String result = data.getStringExtra("RESULT"); if ( result.equals("終わったよ") ) { } if ( result.equals("更新したよ") ) { // 更新後データの取得 WebData webData_update = (WebData) data.getSerializableExtra("DATA"); WebData webData_listview = arrayAdapter.getItem(MainActivity.this.position); // 更新されたデータのセット webData_listview.name = webData_update.name; // 再表示 listView.setAdapter(arrayAdapter); } } } }
第二画面に変数定義 private TextView link; private TextView name; private EditText editText; 第二画面の初期画面表示 以降、onCreate にて
// 画面コントロールのインスタンス取得 link = (TextView) Main2Activity.this.findViewById(R.id.textViewLink); name = (TextView) Main2Activity.this.findViewById(R.id.textViewName); editText = (EditText) Main2Activity.this.findViewById(R.id.editText); // データの取得 Intent intent = Main2Activity.this.getIntent(); WebData webData = (WebData) intent.getSerializableExtra("DATA"); // データのセット link.setText(webData.link); name.setText(webData.name); editText.setText(webData.name);
ただ戻るだけのボタンの処理
Button buttonReturn = (Button) Main2Activity.this.findViewById(R.id.buttonReturn); buttonReturn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("RESULT", "終わったよ"); setResult(Main2Activity.RESULT_OK, intent); // 第二画面終了 Main2Activity.this.finish(); } });
画面上の更新処理
Button buttonUpdate = (Button) Main2Activity.this.findViewById(R.id.buttonUpdate); buttonUpdate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("RESULT", "更新したよ"); Intent intentStart = Main2Activity.this.getIntent(); WebData webData = (WebData) intentStart.getSerializableExtra("DATA"); // 入力内容をセットする webData.name = editText.getText().toString(); intent.putExtra("DATA", webData); setResult(Main2Activity.RESULT_OK, intent); // 第二画面終了 Main2Activity.this.finish(); } });
|
【Androidの最新記事】
- Android Studio : LiveDoor のお天気情報をリストビューに表示する手順
- Android のメニュー項目を条件が満たされた時のみ利用可能にする / onPrepareOptionsMenu
- Android の教科書到着しました。
- Android Studio をちょっと古い PC で使うと エミュレータが実行されなかった。
- Android Studio で、Failed to find target with hash string というエラーが出たら、Module の build.gradle を変更します
- Android Studio で Fragment の tools:layout で画面を指定して MainActivity には処理を書かないアプリケーション
- Android の SeekBar を縦方向で使用する設定
- Android 5.1(API 22) と Android 4.4(API 19) でのそれぞれの DatePicker ダイアログの扱い
- Android 5.1(API 22) と Android 4.4(API 19) でのそれぞれの DatePicker コントロールの扱い
- Android Studio でプロジェクトを読み込むと、Error : C:\Users\User\.gradle\caches... と表示されて gradle の処理が出来なくなる場合の対処
- Android Studio 1.4.1 : Android 純正 Data Binding テンプレート
- Android アプリ作成の基礎 : PDF で問題
- Android Chrome の 謎の(?) 241文字仕様 / 241文字以上のコンテンツは文字が大きく表示される
- Android Studio : 行の途中で改行した時のインデント数を 1 にする
- Android Studio : キャラクタセット
- Android Studio : 起動時にプロジェクトを読み込まない設定
- Android Studio の SDK ヘのパスの変更
- armeabi-v7a しか動かない、ちょっと古い PC で、どーしてもエミュレータが起動しなくてやった事( 動いた、万歳 )
- Android 5.1 + Pleiades( Luna ) + ADT Plugin
- Android 5.1 エミュレータ + Android Studio 1.1.0 実行イメージ