androidで別の画面へ遷移
画面遷移を行う
androidでは画面のことをactivityとして画面を移動するらしい
Ⅰつ目の画面
深く考えずにリストを作成する
MainActivity:ソースもリスト表示のみ
package jp.mshige1979.app.sampleappactivity1; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends ActionBarActivity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 表示用データ String[] list = {"aaaa", "bbbb", "cccc", "dddd"}; // 紐付け listview = (ListView)findViewById(R.id.listView); // ArrayAdapterへ設定 ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_expandable_list_item_1, list); // リストビューへ設定 listview.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
画面表示
2つめの画面
アクティビティを追加
サブ画面用のアクティビティファイルの確認
メイン画面から画面遷移
MainActivityよりリストクリック時に画面を遷移する処理を追加
package jp.mshige1979.app.sampleappactivity1; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 表示用データ String[] list = {"aaaa", "bbbb", "cccc", "dddd"}; // 紐付け listview = (ListView)findViewById(R.id.listView); // ArrayAdapterへ設定 ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_expandable_list_item_1, list); // リストビューへ設定 listview.setAdapter(adapter); // リストをクリック listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // リストビューの項目を取得 ListView listview = (ListView) parent; String item = (String)listview.getItemAtPosition(position); // インテントのインスタンス生成 Intent intent = new Intent(MainActivity.this, MainActivity2.class); // 次画面のアクティビティ起動 startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
※Intentを使用して起動する画面やデータを制御
結果
サブアクティビティに値を渡す場合
MainActivityで値をセットしてからサブ画面を起動する
package jp.mshige1979.app.sampleappactivity1; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 表示用データ String[] list = {"aaaa", "bbbb", "cccc", "dddd"}; // 紐付け listview = (ListView)findViewById(R.id.listView); // ArrayAdapterへ設定 ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_expandable_list_item_1, list); // リストビューへ設定 listview.setAdapter(adapter); // リストをクリック listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // リストビューの項目を取得 ListView listview = (ListView) parent; String item = (String)listview.getItemAtPosition(position); // インテントのインスタンス生成 Intent intent = new Intent(MainActivity.this, MainActivity2.class); // 値をセットする intent.putExtra("list_item", item); // 次画面のアクティビティ起動 startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
MainActivity2で値を受け取るようにする
package jp.mshige1979.app.sampleappactivity1; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity2 extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_activity2); // インテントを取得 Intent intent = getIntent(); // インテントに保存されたデータを取得 String data = intent.getStringExtra("list_item"); // data Toast.makeText(MainActivity2.this,data, Toast.LENGTH_SHORT).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main_activity2, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
※ getIntentで元画面のデータを取得する
所感
android studioが優れているのかわからないけどある程度はまとめてやってくれるので面倒な感じはしていない。
値を渡したり、表示方法を別の方法でできるかはあとで考える。
ブログを書いていくと調査メモとして残せるので多少の復習代わりになって便利な感じ