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();
}
});
posted by
at 2017-07-02 00:47
|
Android
|

|