Android開発(switch文)について
Android開発(switch文)について
Androidアプリ開発における
listviewについて質問させてください。
現在、"東京","神奈川","千葉","埼玉","茨城","栃木","群馬"
画面から東京を選び、"新宿","上野","秋葉原"が表示されています。
public void onBackPressed を追加したことにより
一つ前の画面に戻る事ができたのですが
このような記述で問題ないでしょうか?
もっとシンプルなやり方があれば、アドバイス願います。
また、"新宿","上野","秋葉原"画面から
新宿を選んだ時は、shinjyuku.html
上野を選んだときは、ueno.html
秋葉原を選んだ時は、akihabara.html を表示したいのですが
どのタイミングで、switch文を入れれば良いのでしょうか?
■searchActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
public class searchActivity extends Activity {
private ListView list;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
String[] arr = {"東京","神奈川","千葉","埼玉","茨城","栃木","群馬"};
// コンポーネントの設定
list = (ListView)this.findViewById(R.id.list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list, arr);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
setList2(arg3);
}
});
}
private void setList2(long id) {
String[] tokyo = {"新宿","上野","秋葉原"};
String[] kanagawa = {"横浜","桜木町","関内","新横浜"};
String[] chiba = {"千葉","市川","船橋"};
String[] saitama = {"大宮","浦和","蕨","川口・西川口"};
ArrayAdapter<String> adapter = null;
switch ((int)id) {
case 0:
adapter = new ArrayAdapter<String>(this, R.layout.list, tokyo);
break;
case 1:
adapter = new ArrayAdapter<String>(this, R.layout.list, kanagawa);
break;
case 2:
adapter = new ArrayAdapter<String>(this, R.layout.list, chiba);
break;
case 3:
adapter = new ArrayAdapter<String>(this, R.layout.list, saitama);
break;
}
list.setVisibility(View.GONE);
ListView list2 = (ListView)this.findViewById(R.id.list2);
list2.setAdapter(adapter);
list2.setVisibility(View.VISIBLE);
}
//ここを追加
@Override
public void onBackPressed() {
//メニュー画面に戻る(start)
setContentView(R.layout.main);
String[] arr = {"東京","神奈川","千葉","埼玉","茨城","栃木","群馬"};
list = (ListView)this.findViewById(R.id.list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list, arr);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
setList2(arg3);
}
});
}
}
■main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textSize="20sp"
android:background="#ffffff">
<ListView
android:id="@+id/list"
android:visibility="visible"
android:layout_height="fill_parent" android:layout_width="fill_parent"/>
<ListView
android:id="@+id/list2"
android:visibility="gone"
android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</RelativeLayout>
■list.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="20sp"
android:paddingTop="50.0px"
android:paddingLeft="20.0px"
android:background="#ffffff"
android:textColor="#000000"
/>
以上、宜しくお願いいたします。
お礼
さっそくの回答ありがとうございます! おっしゃることは分かりますし、そのような修正を行えれば良いのですが、なにぶんにも Titanium というフレームワークを使っている関係で、Java で書くことができないのです。 このフレームワークでは JavaScript を基本に画面を組み立ててアプリを作るということになっており、おおよそ下記のような感じになります。(ソースからのコピペではないので実際に動くものではありません) //ウインドウを作る var win = Ti.UI.createWindow({ backgroundColor : 'white', }); //リストを作る var resultlist = Ti.UI.createTableView(); //行を作成して、登録 for (var i = 0; i < json.result.length; i++) { var row = Ti.UI.createTableViewRow({ title:'', height: '60', }); var rowname = Titanium.UI.createLabel({ text : json.result[i].name, color : '#000', top : 5, left : '1%', width : '49%', height : 'auto' }); row.add(rowname); tabledata.push(row); } //テーブルにデータをセット resultlist.data = tabledata; resultlist.addEventListener('click', function(e) { Titanium.UI.createAlertDialog({ title: 'メッセージ', message: '選択されました', buttonNames: ['OK'] }).show(); }); ・・・という感じですので、ご指摘のような修正を入れることはできないのではないかと思います。そこで Titanimum および JavaScript の範囲で回避できる方法はないものだろうかと探しております。せっかく回答をいただいたのに申し訳ありません。