SimpleCursorAdapterを使用したListViewをクリックした時の
ItemClickListenerについてご質問があります。
ご存じの方は、お教えいただけると幸いです。
前提として、
・SimpleCursorAdapterを使用して、SQLiteで保存したデータをListViewで表示させています。
・ListViewに表示させている項目は複数項目あります。
このListViewをクリックした時に、setOnItemClickListenerを設定すると
エラーになってしまうのです。
コードは下記のとおりです。
クリックすると、予期せず停止しました、という強制終了になります。
ログキャットには、NullPointerExceptionというエラーが表示されるのです。
(他に必要な情報があればご指摘ください)
結構はまってて、検討もついてないので、この辺りを考えたら、みたいなご指摘だけでも
いただけると幸いです。
listViewStart.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
ListView listView = (ListView) parent;
Cursor cursor1 = (Cursor)listView.getSelectedItem();
String Id =cursor1.getString(cursor1.getColumnIndex("_id"));
Toast.makeText(getApplicationContext(),Id,Toast.LENGTH_LONG).show();
}
});
補足)元々はこういうコードを試していました。
http://www.techmaru.net/wordpress/20100729/listviewope/というあたりの記述を見て試していました。
こちらの場合も強制終了になり、ログキャットにはClassCastExceptionと表示されます
ただ、私の場合Listviewに複数項目を持っているために、行数が分かっただけでは項目が特定できない
からエラーになるのかと思って、今度は上記の方法を試しました。
そもそもこの推測自体が間違っているのでしょうか(^^;)
listViewStart.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
ListView listView = (ListView) parent;
String item = (String)listView.getItemAtPosition(position);
Toast.makeText(getApplicationContext(),item,Toast.LENGTH_LONG).show();
}
});
ややこしい話で申し訳ございませんが、よろしくお願いいたします。
はじめまして、元木といいます。
Logcat のメッセージに、何行目でNullPointerException が発生したかが示されているはずです。まずは、そこを確認してみてはいかが?
はじめまして。
ご返信ありがとうございます!
NullPointerException は下記の行で発生しています。
String Id =cursor1.getString(cursor1.getColumnIndex("_id"));
リストビューに渡す時の値も下記の通りなので、"_id"でデータが取れると思っているのですが、
取れていないという事なのでしょうか?
なお、"_id"の代わりに、BaseColumns._IDで行っても同じエラーが出て、SQLiteのDBを
ツールで確認すると項目名は"_id"となっているのです。
項目名の指定が間違っているなら、それを確認する方法でもあれば確認してみるのですが、
それも分からなくて立ち往生している状況なのです。
String[] from ={ BaseColumns._ID ,"WHATTIME","WHAT","WHATPLUS"};
int[] to
={R.id.TextViewStartId,R.id.TextViewWhatTime,R.id.TextViewWhat,R.id.TextViewWhatPlus};
SimpleCursorAdapter adapter = new
SimpleCursorAdapter(getApplicationContext(),R.layout.list2,cursor,
from, to);
ListView listViewStart = (ListView)findViewById(R.id.listViewStart);
listViewStart.setAdapter(adapter);
またいい方法などあれば教えていただければ幸いです。
2011年8月21日12:40 潔元木 <kiyoshi...@gmail.com>:
自己レスですが、最初のListViewからCursorにデータを取るところで、「.getSelectedItem();」を
「.getItemAtPosition(position);」に変更するとうまくいきました!
元木様ありがとうございました!!
listViewStart.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ListView listView = (ListView) parent;
Cursor cursor1 = (Cursor)listView.getItemAtPosition(position);
String Id = cursor1.getString(cursor1.getColumnIndex(BaseColumns._ID));
Toast.makeText(getApplicationContext(),Id,Toast.LENGTH_LONG).show();
}
});
2011年8月21日15:31 福田 <fukud...@gmail.com>: