ArrayAdapter を android.R.layout.simple_list_item_1 で4パターン SimpleAdapter の android.R.layout.simple_list_item_2 で1パターンです
001.
package
app.lightbox.winofsql.jp.listviewaction;
002.
003.
import
android.app.Activity;
004.
import
android.content.Intent;
005.
import
android.net.Uri;
006.
import
android.os.Bundle;
007.
import
android.util.Log;
008.
import
android.view.Menu;
009.
import
android.view.MenuItem;
010.
import
android.view.View;
011.
import
android.widget.AdapterView;
012.
import
android.widget.ArrayAdapter;
013.
import
android.widget.ListView;
014.
import
android.widget.SimpleAdapter;
015.
import
android.widget.Toast;
016.
017.
import
java.util.ArrayList;
018.
import
java.util.Arrays;
019.
import
java.util.HashMap;
020.
import
java.util.List;
021.
import
java.util.Map;
022.
023.
public
class
MainActivity
extends
Activity {
024.
025.
private
ArrayAdapter<String> strArrayAdapter =
null
;
026.
private
ArrayAdapter<MyData> arrayMyData =
null
;
027.
private
ListView listview =
null
;
028.
private
String [] strData1 =
null
;
029.
private
String [] strData1Url =
null
;
030.
private
String [] strData2 =
null
;
031.
private
SimpleAdapter itemsAdapter =
null
;
032.
033.
// ListView にセットする配列用クラス
034.
class
MyData {
035.
public
String title =
null
;
036.
public
String url =
null
;
037.
public
MyData(String myTitle,String myUrl) {
038.
title = myTitle;
039.
url = myUrl;
040.
}
041.
// toString で呼び出された内容が ListView に表示されます
042.
@Override
043.
public
String toString() {
044.
return
title;
045.
}
046.
}
047.
048.
// https://developer.android.com/guide/components/intents-common.html#Browser
049.
private
void
callBrowser( String url ) {
050.
// ブラウザの呼び出し
051.
Uri uri = Uri.parse(url);
052.
Intent intent =
new
Intent(Intent.ACTION_VIEW, uri);
053.
if
(intent.resolveActivity(getPackageManager()) !=
null
) {
054.
startActivity(intent);
055.
return
;
056.
}
057.
058.
// 対応するアプリが無い
059.
Toast.makeText(
060.
MainActivity.
this
,
061.
"ブラウザを呼び出せません"
,
062.
Toast.LENGTH_LONG
063.
).show();
064.
return
;
065.
066.
}
067.
068.
@Override
069.
protected
void
onCreate(Bundle savedInstanceState) {
070.
super
.onCreate(savedInstanceState);
071.
setContentView(R.layout.activity_main);
072.
073.
// ListView のインスタンスを取得
074.
listview = (ListView) MainActivity.
this
.findViewById(R.id.listView);
075.
// クリックした時のイベント作成
076.
listview.setOnItemClickListener(
new
AdapterView.OnItemClickListener() {
077.
@Override
078.
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id) {
079.
// クリックされたビューの内部データ
080.
Object data = (Object)parent.getItemAtPosition(position);
081.
// クラス名を取得
082.
Log.i(
"lightbox"
,
"data type:"
+ data.getClass().getName());
083.
String myClass =
"app.lightbox.winofsql.jp.listviewaction.MainActivity$MyData"
;
084.
String simple =
"java.util.HashMap"
;
085.
// 専用クラスの場合
086.
if
( myClass.equals(data.getClass().getName()) ) {
087.
MyData myData = (MyData)data;
088.
Log.i(
"lightbox"
,
"title:"
+ myData.title);
089.
Log.i(
"lightbox"
,
"url:"
+ myData.url);
090.
091.
// ブラウザの呼び出し
092.
callBrowser(myData.url);
093.
return
;
094.
}
095.
096.
if
( simple.equals(data.getClass().getName()) ) {
097.
Map map = (Map)data;
098.
Log.i(
"lightbox"
,
"title:"
+ map.get(
"item1"
));
099.
Log.i(
"lightbox"
,
"url:"
+ map.get(
"item2"
));
100.
101.
// ブラウザの呼び出し
102.
callBrowser(map.get(
"item2"
).toString());
103.
return
;
104.
}
105.
106.
// 単純な文字列の場合
107.
String myData = (String)data;
108.
Log.i(
"lightbox"
,
"text:"
+ (String)data);
109.
110.
}
111.
});
112.
113.
// 単純な文字列配列用
114.
strArrayAdapter =
new
ArrayAdapter<String>(
115.
MainActivity.
this
,
116.
android.R.layout.simple_list_item_1,
117.
android.R.id.text1
118.
);
119.
// 専用クラス用
120.
arrayMyData =
new
ArrayAdapter<MyData>(
121.
MainActivity.
this
,
122.
android.R.layout.simple_list_item_1,
123.
android.R.id.text1
124.
);
125.
126.
// タイトルデータ(1)
127.
strData1 =
new
String[]{
128.
"Yahoo! ニュース"
,
"Yahoo! 雨雲ズームレーダー"
,
129.
"ねとらぼ"
,
"GIGAZINE"
,
"Twitter"
,
"OneDrive"
,
130.
"楽天市場"
,
"ウィキペディア"
,
"Yahoo!テレビ"
,
131.
"@IT"
,
"Stack Overflow"
,
"Android Developers"
132.
};
133.
// タイトルデータ(1) の URL データ
134.
strData1Url =
new
String[]{
135.
"http://news.yahoo.co.jp/"
,
136.
"http://weather.yahoo.co.jp/weather/zoomradar/"
,
137.
"http://nlab.itmedia.co.jp/"
,
138.
"http://gigazine.net/"
,
139.
"http://twitter.com/"
,
140.
"http://onedrive.live.com/"
,
141.
"http://www.rakuten.co.jp/"
,
142.
"https://ja.wikipedia.org"
,
143.
"http://tv.yahoo.co.jp/"
,
144.
"http://www.atmarkit.co.jp/"
,
145.
"http://stackoverflow.com/"
,
146.
"http://developer.android.com/index.html"
147.
};
148.
149.
// タイトルデータ(2)
150.
strData2 =
new
String[]{
151.
"GIGAZINE"
,
"Twitter"
,
"OneDrive"
,
"楽天市場"
,
152.
"ウィキペディア"
,
"Yahoo! ニュース"
,
153.
"Yahoo! 雨雲ズームレーダー"
,
"Yahoo!テレビ"
,
154.
"ねとらぼ"
,
"@IT"
,
"Stack Overflow"
,
155.
"Android Developers"
,
"Facebook"
,
"Dropbox"
156.
};
157.
158.
}
159.
160.
@Override
161.
public
boolean
onCreateOptionsMenu(Menu menu) {
162.
getMenuInflater().inflate(R.menu.menu_main, menu);
163.
return
true
;
164.
}
165.
166.
@Override
167.
public
boolean
onOptionsItemSelected(MenuItem item) {
168.
int
id = item.getItemId();
169.
170.
// 文字列を一つ一つ add して ListView を作成します
171.
if
(id == R.id.lv_action1) {
172.
// ArrayAdapter をクリア
173.
strArrayAdapter.clear();
174.
for
(
int
i =
0
; i < strData1.length; i++ ) {
175.
strArrayAdapter.add(strData1[i]);
176.
}
177.
listview.setAdapter(strArrayAdapter);
178.
return
true
;
179.
}
180.
181.
// 配列をそのままセットして ListView を作成します
182.
if
(id == R.id.lv_action2) {
183.
// ArrayAdapter をクリア
184.
strArrayAdapter.clear();
185.
// でき上がっている配列をそのままセット
186.
strArrayAdapter.addAll(strData2);
187.
listview.setAdapter(strArrayAdapter);
188.
return
true
;
189.
}
190.
191.
// List をそのままセットして ListView を作成します
192.
if
(id == R.id.lv_action3) {
193.
// ArrayAdapter をクリア
194.
strArrayAdapter.clear();
195.
// 配列から List を作成
196.
List<String> list = Arrays.asList(strData1);
197.
// List を指定する addAll
198.
strArrayAdapter.addAll(list);
199.
listview.setAdapter(strArrayAdapter);
200.
return
true
;
201.
}
202.
203.
// 専用クラス用のアダプタで ListView を作成します
204.
if
(id == R.id.lv_action4) {
205.
// ArrayAdapter をクリア
206.
arrayMyData.clear();
207.
// 配列から作成
208.
for
(
int
i =
0
; i < strData1.length; i++ ) {
209.
arrayMyData.add(
new
MyData(strData1[i],strData1Url[i]));
210.
}
211.
listview.setAdapter(arrayMyData);
212.
return
true
;
213.
}
214.
215.
// SimpleAdapter で複数項目の表示
216.
if
(id == R.id.lv_action5) {
217.
// 内部データを作成
218.
List list =
new
ArrayList<Map<String, ?>>();
219.
for
(
int
i =
0
; i < strData1.length; i++ ) {
220.
Map map =
new
HashMap();
221.
// 名前は文字列で適当に付けます( item1, item2 )
222.
map.put(
"item1"
, strData1[i]);
223.
map.put(
"item2"
, strData1Url[i]);
224.
list.add(map);
225.
}
226.
227.
// 複数項目のビュー用のインスタンス
228.
itemsAdapter =
new
SimpleAdapter(
229.
// 1)
230.
MainActivity.
this
,
231.
// 2)
232.
list,
233.
// 3) 二つの項目を持つビュー
234.
android.R.layout.simple_list_item_2,
235.
// 4) ここで項目を一致させる
236.
new
String[] {
"item1"
,
"item2"
},
237.
// 5) 実際のビューの id と一致させる
238.
new
int
[] { android.R.id.text1, android.R.id.text2 }
239.
);
240.
listview.setAdapter(itemsAdapter);
241.
return
true
;
242.
}
243.
244.
return
super
.onOptionsItemSelected(item);
245.
}
246.
}
画面定義
01.
<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
02.
xmlns:tools
=
"http://schemas.android.com/tools"
03.
android:layout_width
=
"match_parent"
04.
android:layout_height
=
"match_parent"
05.
android:paddingBottom
=
"@dimen/activity_vertical_margin"
06.
android:paddingLeft
=
"@dimen/activity_horizontal_margin"
07.
android:paddingRight
=
"@dimen/activity_horizontal_margin"
08.
android:paddingTop
=
"@dimen/activity_vertical_margin"
09.
tools:context
=
".MainActivity"
>
10.
11.
<
ListView
12.
android:id
=
"@+id/listView"
13.
android:layout_width
=
"wrap_content"
14.
android:layout_height
=
"wrap_content"
15.
android:layout_alignParentStart
=
"true"
16.
android:layout_alignParentTop
=
"true"
/>
17.
18.
</
RelativeLayout
>
メニュー
01.
<
menu
xmlns:android
=
"http://schemas.android.com/apk/res/android"
02.
xmlns:tools
=
"http://schemas.android.com/tools"
03.
tools:context
=
".MainActivity"
>
04.
<
item
05.
android:id
=
"@+id/lv_action1"
06.
android:title
=
"ArrayAdapter add"
07.
android:orderInCategory
=
"100"
08.
android:showAsAction
=
"never"
/>
09.
<
item
10.
android:id
=
"@+id/lv_action2"
11.
android:title
=
"ArrayAdapter addAll Array"
12.
android:orderInCategory
=
"100"
13.
android:showAsAction
=
"never"
/>
14.
<
item
15.
android:id
=
"@+id/lv_action3"
16.
android:title
=
"ArrayAdapter addAll List"
17.
android:orderInCategory
=
"100"
18.
android:showAsAction
=
"never"
/>
19.
<
item
20.
android:id
=
"@+id/lv_action4"
21.
android:title
=
"ArrayAdapter addAll MyData"
22.
android:orderInCategory
=
"100"
23.
android:showAsAction
=
"never"
/>
24.
<
item
25.
android:id
=
"@+id/lv_action5"
26.
android:title
=
"SimpleAdapter で複数項目"
27.
android:orderInCategory
=
"100"
28.
android:showAsAction
=
"never"
/>
29.
30.
</
menu
>