SQLの窓 イラストAC フリー素材

2017年07月02日

Android Studio : LiveDoor のお天気情報をリストビューに表示した後、第二画面で name を変更して第一画面で再表示する手順

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の最新記事】
posted by at 2017-07-02 00:47 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Custom Search
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX