7-2 アクティビティの遷移

Download Report

Transcript 7-2 アクティビティの遷移

7-2 アクティビティの遷移
1.新しいアクティビティ
【AndroidManifest.xml に追加】
…
<activity android:name=“.ActActivity” />
</application>
</manifest>
明示的インデント
【起動されるクラス名を指定】
Intent intent=new Intent(getApplicationContext(),
ActActivity.class);
前の例は,アクションに対するアプリケーションが自動的に
起動されるので暗黙的インテントと呼ばれる。
値を受け取る
①処理結果を返してもらうには,
startActivityForResult()
メソッドで起動する。
②結果を返すには,データを取得し入力画面に設定する。
③終了する際にsetResultメソッドでRESULT_OKを返す。
④受け取る側では,onActibityResult メソッドで処理する。
起動側プログラム(その1)
ここではActExActivity クラス
package jp.sample;
import java.util.*;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.widget.AdapterView.*;
public class ActExActivity extends Activity {
public static int CALLED_ACT =1;
ListView listV; Button button1, button2;
ArrayList<HashMap<String, String>> data;
起動側プログラム(その2)
ここではActExActivity クラス
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//レイアウト生成
LinearLayout LL=new LinearLayout(this);
LL.setOrientation(LinearLayout.VERTICAL);
setContentView(LL);
listV=new ListView(this);
// ボタン生成
button1=new Button(this); button1.setText("新規");
button2=new Button(this); button2.setText("削除");
// アダプタ作成
data = new ArrayList<HashMap<String,String>>();
String[] str ={"Term1", "Term2"};
int [] ids ={android.R.id.text1,android.R.id.text2};
SimpleAdapter adapter= new SimpleAdapter(this, data,
android.R.layout.simple_list_item_single_choice,str,ids);
起動側プログラム(その3)
ここではActExActivity クラス
listV.setAdapter(adapter);
listV.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
LL.addView(button1); LL.addView(button2); LL.addView(listV);
listV.setOnItemClickListener(new actOnItemClickListener());
button1.setOnClickListener(new actOnClickListener1());
button2.setOnClickListener(new actOnClickListener2());
}
class actOnClickListener1 implements OnClickListener //新規ボタンを押したとき
{
public void onClick(View v)
{
Intent intent=new Intent(getApplicationContext(),
ActActivity.class);
int pos = data.size();
String Term1="Term1";
String Term2="Term2";
intent.putExtra("Term1",Term1);
intent.putExtra("Term2",Term2);
intent.putExtra("Pos",pos);
startActivityForResult(intent,CALLED_ACT);
}
}
起動側プログラム(その4)
(削除ボタンを押したとき処理される)
class actOnClickListener2 implements OnClickListener
{
public void onClick(View v)
{
int pos = listV.getCheckedItemPosition();
if(pos>=0){
data.remove(pos);
SimpleAdapter adapter=(SimpleAdapter) listV.getAdapter();
adapter.notifyDataSetChanged();
listV.setItemChecked(-1,true);
}
}
}
起動側プログラム(その5)
(Listを押したしたときに処理される)
class actOnItemClickListener implements OnItemClickListener
{
public void onItemClick(AdapterView<?>v, View iv,int pos, long id)
{
Intent intent=new Intent(getApplicationContext(),
ActActivity.class);
HashMap<String,String> hm=data.get(pos);
String Term1=hm.get("Term1");
String Term2=hm.get("Term2");
intent.putExtra("Term1",Term1);
intent.putExtra("Term2",Term2);
intent.putExtra("Pos",pos);
startActivityForResult(intent,CALLED_ACT);
}
}
起動側プログラム(その6)
(結果が返ってきたときに処理される)
protected void onActivityResult(int reqCode, int result, Intent intent)
{
if(reqCode==CALLED_ACT && result==RESULT_OK)
{
String Term1=intent.getStringExtra("Term1");
String Term2=intent.getStringExtra("Term2");
int pos=intent.getIntExtra("Pos",0);
HashMap<String,String> hm=new HashMap<String,String>();
hm.put("Term1",Term1);
hm.put("Term2",Term2);
if(pos==data.size())data.add(pos,hm);
else data.set(pos,hm);
SimpleAdapter ad=(SimpleAdapter) listV.getAdapter();
ad.notifyDataSetChanged();
}
}
}
起動される側のプログラム(その1)
ここではActActivity クラス
package jp.sample;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
起動される側のプログラム(その2)
ここではActActivity クラス
public class ActActivity extends Activity {
EditText et1, et2; Button button; String Term1, Term2;
int pos; Intent intent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout LL=new LinearLayout(this);
LL.setOrientation(LinearLayout.VERTICAL);
setContentView(LL);
et1=new EditText(this); et2=new EditText(this);
button=new Button(this); button.setText("OK");
intent=getIntent();
Term1=intent.getStringExtra("Term1");
Term2=intent.getStringExtra("Term2");
pos=intent.getIntExtra("Pos",0);
et1.setText(Term1); et2.setText(Term2);
LL.addView(et1); LL.addView(et2);LL.addView(button);
button.setOnClickListener(new ActClickListener());
}
起動される側のプログラム(その3)
ここではActActivity クラス
class ActClickListener implements OnClickListener
{
public void onClick(View v){
intent.putExtra("Term1", et1.getText().toString());
intent.putExtra("Term2", et2.getText().toString());
intent.putExtra("Pos", pos);
setResult(Activity.RESULT_OK,intent);
finish();
}
}
}
開始画面
入力して
「OK」ボタンを押す
さらに続けて
実行例