コメント |
@SHOW
[[解説ページ]]
http://logicalerror.seesaa.net/article/439638031.html(Android Studio で、ListView アプリケーションを作成するテンプレート)
@END
@HTML
<a href="http://winofsql.jp/download/tools.jar">tools.jar
<img src="http://winofsql.jp/image/lightbox_download.jpg" style="border: solid 1px #000000"></a>
@HEND
https://github.com/google/gson(Google Gson)
https://lightbox.sakura.ne.jp/homepage/demo/data/csvtype/json.php(JSON データ)
https://lh3.googleusercontent.com/-AaIxzovoJpI/V_soTYky3nI/AAAAAAAAg_8/Z2cBVxSTwVUGBngRJNmTKheYCXE1vT0ywCHM/s400/Screenshot_1476077497.png
[[MainActivity]]
@DIV
public class MainActivity extends AppCompatActivity {
private final int MY_REQUEST_CODE = 1000;
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// リストビューの取得
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) {
// アダプターを取得
MyArrayAdapter adapter = (MyArrayAdapter)parent.getAdapter();
// 行データを取得
JsonData json = (JsonData)adapter.getItem(position);
// 引渡しデータを作成
Intent intent = new Intent(MainActivity.this,NextActivity.class);
intent.putExtra("DATA","こんにちは");
// Serializable インターフェイスなのでまとめて渡す
intent.putExtra("OBJECT",json);
// 画面移動
MainActivity.this.startActivityForResult(intent,MY_REQUEST_CODE);
}
});
// JSON データの URL
String json_url = "https://lightbox.sakura.ne.jp/homepage/demo/data/csvtype/json.php";
// tools.jar の static メソッド
Tools.callHttpGet(json_url, "utf-8", new Tools.OnAsyncTaskListener() {
@Override
public void onAsyncTaskListener(String s) {
// JSON データをデシリアライズ
Gson gson = new Gson();
JsonDataList jdl = gson.fromJson(s, JsonDataList.class);
// アダプタを作成して、データをセット
MyArrayAdapter adapter
= new MyArrayAdapter(MainActivity.this,R.layout.list_item);
// jdl.item は配列
adapter.addAll(jdl.item);
// リストビューにデータを表示
listview.setAdapter(adapter);
}
});
}
// ******************************
// 次画面から戻って来た時の処理
// ******************************
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ( requestCode == MY_REQUEST_CODE ) {
// NextActivity の 戻るボタン以外で戻ると 0
Log.i("lightbox",String.format("NextActivity からの戻り値 : %d", resultCode));
if ( data != null ) {
String message = data.getStringExtra("DATA");
Log.i("lightbox",String.format("NextActivity からのメッセージ : %s", message));
}
}
}
// ******************************
// JsonData を格納する、この処理専用の
// ArrayAdapter のカスタマイズ
// ******************************
private class MyArrayAdapter extends ArrayAdapter<JsonData> {
// コンストラクタで渡された画面の保存
private int mResource;
public MyArrayAdapter(Context context, int resource) {
super(context, resource);
// ArrayAdapter でも、このようにして保存して利用してます
mResource = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// 現在の View の取得
LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(mResource, null);
}
// アダプターより行データを取得
JsonData json = MyArrayAdapter.this.getItem(position);
// 画面にデータをセット
TextView tv;
// Subject
tv = (TextView) convertView.findViewById(R.id.textItem1);
tv.setText(json.getSubject());
// Name
tv = (TextView) convertView.findViewById(R.id.textItem2);
tv.setText(json.getName());
// 行の画面をシステムに返す
return convertView;
}
}
}
@END |