ArrayAdapter.java の中身を見ると、getView では、ListView に使われた ArrayAdapter 内のクラスに対して、toString() で文字列を取得して行のテキストにセットしています。 そして、行のテキストは TextView という前提で作られており、コンストラクタにその TextView の id が引き渡されているかどうかで行の画面定義が2通りである事が解ります。 コンストラクタに TextView の id を渡さない この場合は、行の画面定義は TextView だけで成り立っている必要があり、ここで使っている android.R.layout.simple_list_item_1 には、TextView の定義しかありません。 コンストラクタに TextView の id を渡す この場合は、行の画面定義内に少なくとも一つ TextView があれば良く、その TextView の id を引き渡す必要があります。
try {
if (mFieldId == 0) {
// If no custom field is assigned, assume the whole resource is a TextView
text = (TextView) view;
} else {
// Otherwise, find the TextView field within the layout
text = (TextView) view.findViewById(mFieldId);
}
} catch (ClassCastException e) {
Log.e("ArrayAdapter", "You must supply a resource ID for a TextView");
throw new IllegalStateException(
"ArrayAdapter requires the resource ID to be a TextView", e);
}
package sample.lightbox.listview01;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends Activity {
static final String DEBUG_TAG = "ListView :";
// ArrayAdapter 用プライベートクラス
private class MyLinkData {
String myText;
String myUrl;
MyLinkData( String myText, String myUrl ) {
this.myText = myText;
this.myUrl = myUrl;
}
public String toString() {
return myText;
}
}
// 変数定義
ArrayList<MyLinkData> myLinks = null;
ArrayAdapter<MyLinkData> adapter = null;
ListView listView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myLinks = new ArrayList<MyLinkData>();
myLinks.add(new MyLinkData( "SQLの窓", "http://winofsql.jp" ));
myLinks.add(new MyLinkData("logical error", "http://logicalerror.seesaa.net/"));
myLinks.add(new MyLinkData("琴線に触れる", "http://heart.winofsql.jp/"));
myLinks.add(new MyLinkData("GINPRO", "http://ginpro.winofsql.jp/"));
// リストビュー用のアダプターを作成
adapter = new ArrayAdapter<MyLinkData>(this, android.R.layout.simple_list_item_1);
adapter.addAll(myLinks);
// リストビューのインスタンスを取得
listView = (ListView) MainActivity.this.findViewById(R.id.listView);
// リストビューにデータ( アダプター ) をセット
listView.setAdapter(adapter);
// イベント
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MyLinkData item = adapter.getItem(position);
// LogCatに表示
Log.i(DEBUG_TAG, item.myUrl);
Log.i(DEBUG_TAG, item.toString());
Log.i(DEBUG_TAG, Integer.toString(position));
// URL を開く
startActivity( new Intent(Intent.ACTION_VIEW, Uri.parse(item.myUrl)) );
}
});
}
}
onItemClick の中身については、以下のように SDK で書かれています。 Parameters parent => The AdapterView where the click happened. ※ クリックされた View( Adapter をセットした View / ここでは ListView ) view => The view within the AdapterView that was clicked (this will be a view provided by the adapter) ※ クリックされた View の 中の行の View( ArrayAdapter で用意されたもの ) position => The position of the view in the adapter. ※ ArrayAdapter 内の位置 id => The row id of the item that was clicked. ※ 行の id ( position とどう違うが不明。おそらく、ArrayAdapter をカスタマイズした時に自分で実装するものと思われる )
|
|
【Android Studio 1の最新記事】
- Tools クラスを使って Livedoor の お天気Webサービスを呼び出して Google gson でリストビューに一括で投入するとこうなります
- Android の ListView で ArrayAdapter をカスタマイズして表示する時、リストビューのアイテム内にボタン等がある場合のイベント登録時の注意事項
- できる限り不必要な記述は省いて simple_list_item_2 を使った 自前クラスを扱う専用 ArrayAdapter(private) でリストビューの表示
- インターネットからアイコン画像を取得してリストビューを表示する
- Android の AlertDialog を使いやすくする MessageBox クラス
- できるだけ難しい事をせずに、Android のリストビューでタイトルをクリックしたらそのページを表示する
- Android の単純な ListView の ArrayAdapter による応用の効く 4バリエーション と複数項目に即対応できる SimpleAdapter による実装
- Android Studio : インターネット上の画像を取得して、Bitmap か Drawable で ImageView に表示する
- Storage Access Framework のガイドラインに基づく、Android 4.4 とそれ以降における 画像参照
- Android Studio : GET(POST)メソッドで呼び出す際に、PHP 側のセッションを有効にする為に CookieManager を static で使用する
- Android Studio で AsyncTask / Android Studio ならではの操作でコードを楽々作成
- Android Studio : 現在の時間を ライフサイクルのアクティブな時に処理される onStart で表示する( 5.1.1 )
- Android Studio でボタンをクリックして トースト(Toast) を表示する / onClick プロパティと Button へのイベント登録( Listener )
- Google スプレッドシートで、Android Studio の重要な操作のまとめ
- Android Studio で com.example. lightbox. myapplication を jp.winofsql. lightbox. threeButton に変更
- ショートカットキーを使って、Android Studio のコード記述を極限まで楽にする
- Android Studio の 『CTRL + SHIFT + I』(定義の参照) を中心に、少しでも時間短縮
- Android Strudio で行われている『スペルチェック』をオフにする( Typo: In word '.....' という表示 )
- Android Studio と Pleiades Eclipse + Android SDK が参照する Java SE ドキュメントを日本語化する






