package app.lightbox.winofsql.jp.listviewaction;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
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.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends Activity {
private ArrayAdapter<String> strArrayAdapter = null;
private ArrayAdapter<MyData> arrayMyData = null;
private ListView listview = null;
private String [] strData1 = null;
private String [] strData1Url = null;
private String [] strData2 = null;
private SimpleAdapter itemsAdapter = null;
// ListView にセットする配列用クラス
class MyData {
public String title = null;
public String url = null;
public MyData(String myTitle,String myUrl) {
title = myTitle;
url = myUrl;
}
// toString で呼び出された内容が ListView に表示されます
@Override
public String toString() {
return title;
}
}
// https://developer.android.com/guide/components/intents-common.html#Browser
private void callBrowser( String url ) {
// ブラウザの呼び出し
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
return;
}
// 対応するアプリが無い
Toast.makeText(
MainActivity.this,
"ブラウザを呼び出せません",
Toast.LENGTH_LONG
).show();
return;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ListView のインスタンスを取得
listview = (ListView) MainActivity.this.findViewById(R.id.listView);
// クリックした時のイベント作成
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// クリックされたビューの内部データ
Object data = (Object)parent.getItemAtPosition(position);
// クラス名を取得
Log.i("lightbox","data type:" + data.getClass().getName());
String myClass = "app.lightbox.winofsql.jp.listviewaction.MainActivity$MyData";
String simple = "java.util.HashMap";
// 専用クラスの場合
if ( myClass.equals(data.getClass().getName()) ) {
MyData myData = (MyData)data;
Log.i("lightbox", "title:" + myData.title);
Log.i("lightbox", "url:" + myData.url);
// ブラウザの呼び出し
callBrowser(myData.url);
return;
}
if ( simple.equals(data.getClass().getName()) ) {
Map map = (Map)data;
Log.i("lightbox", "title:" + map.get("item1"));
Log.i("lightbox", "url:" + map.get("item2"));
// ブラウザの呼び出し
callBrowser(map.get("item2").toString());
return;
}
// 単純な文字列の場合
String myData = (String)data;
Log.i("lightbox", "text:" + (String)data);
}
});
// 単純な文字列配列用
strArrayAdapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_list_item_1,
android.R.id.text1
);
// 専用クラス用
arrayMyData = new ArrayAdapter<MyData>(
MainActivity.this,
android.R.layout.simple_list_item_1,
android.R.id.text1
);
// タイトルデータ(1)
strData1 = new String[]{
"Yahoo! ニュース","Yahoo! 雨雲ズームレーダー",
"ねとらぼ","GIGAZINE","Twitter","OneDrive",
"楽天市場","ウィキペディア","Yahoo!テレビ",
"@IT","Stack Overflow","Android Developers"
};
// タイトルデータ(1) の URL データ
strData1Url = new String[]{
"http://news.yahoo.co.jp/",
"http://weather.yahoo.co.jp/weather/zoomradar/",
"http://nlab.itmedia.co.jp/",
"http://gigazine.net/",
"http://twitter.com/",
"http://onedrive.live.com/",
"http://www.rakuten.co.jp/",
"https://ja.wikipedia.org",
"http://tv.yahoo.co.jp/",
"http://www.atmarkit.co.jp/",
"http://stackoverflow.com/",
"http://developer.android.com/index.html"
};
// タイトルデータ(2)
strData2 = new String[]{
"GIGAZINE","Twitter","OneDrive","楽天市場",
"ウィキペディア","Yahoo! ニュース",
"Yahoo! 雨雲ズームレーダー","Yahoo!テレビ",
"ねとらぼ","@IT","Stack Overflow",
"Android Developers","Facebook","Dropbox"
};
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
// 文字列を一つ一つ add して ListView を作成します
if (id == R.id.lv_action1) {
// ArrayAdapter をクリア
strArrayAdapter.clear();
for( int i = 0; i < strData1.length; i++ ) {
strArrayAdapter.add(strData1[i]);
}
listview.setAdapter(strArrayAdapter);
return true;
}
// 配列をそのままセットして ListView を作成します
if (id == R.id.lv_action2) {
// ArrayAdapter をクリア
strArrayAdapter.clear();
// でき上がっている配列をそのままセット
strArrayAdapter.addAll(strData2);
listview.setAdapter(strArrayAdapter);
return true;
}
// List をそのままセットして ListView を作成します
if (id == R.id.lv_action3) {
// ArrayAdapter をクリア
strArrayAdapter.clear();
// 配列から List を作成
List<String> list = Arrays.asList(strData1);
// List を指定する addAll
strArrayAdapter.addAll(list);
listview.setAdapter(strArrayAdapter);
return true;
}
// 専用クラス用のアダプタで ListView を作成します
if (id == R.id.lv_action4) {
// ArrayAdapter をクリア
arrayMyData.clear();
// 配列から作成
for( int i = 0; i < strData1.length; i++ ) {
arrayMyData.add(new MyData(strData1[i],strData1Url[i]));
}
listview.setAdapter(arrayMyData);
return true;
}
// SimpleAdapter で複数項目の表示
if (id == R.id.lv_action5) {
// 内部データを作成
List list = new ArrayList<Map<String, ?>>();
for( int i = 0; i < strData1.length; i++ ) {
Map map = new HashMap();
// 名前は文字列で適当に付けます( item1, item2 )
map.put("item1", strData1[i]);
map.put("item2", strData1Url[i]);
list.add(map);
}
// 複数項目のビュー用のインスタンス
itemsAdapter = new SimpleAdapter(
// 1)
MainActivity.this,
// 2)
list,
// 3) 二つの項目を持つビュー
android.R.layout.simple_list_item_2,
// 4) ここで項目を一致させる
new String[] { "item1", "item2" },
// 5) 実際のビューの id と一致させる
new int[] { android.R.id.text1, android.R.id.text2 }
);
listview.setAdapter(itemsAdapter);
return true;
}
return super.onOptionsItemSelected(item);
}
}