SimpleCursorAdapterを使用したListViewについて

1,568 views
Skip to first unread message

福田

unread,
Aug 20, 2011, 10:03:30 PM8/20/11
to android-g...@googlegroups.com
お世話になります。福田と申します。

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();
}
});

ややこしい話で申し訳ございませんが、よろしくお願いいたします。

潔元木

unread,
Aug 20, 2011, 11:40:47 PM8/20/11
to android-g...@googlegroups.com

はじめまして、元木といいます。
Logcat のメッセージに、何行目でNullPointerException が発生したかが示されているはずです。まずは、そこを確認してみてはいかが?

2011/08/21 11:04 "福田" <fukud...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

福田

unread,
Aug 21, 2011, 2:31:52 AM8/21/11
to android-g...@googlegroups.com
元木様

はじめまして。
ご返信ありがとうございます!

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>:

福田

unread,
Aug 21, 2011, 2:43:00 AM8/21/11
to android-g...@googlegroups.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>:

Reply all
Reply to author
Forward
0 new messages