リスト項目レイアウトで ImageButtonbindView
のリスナーを接続できるように、オーバーライドしたカスタム SimpleCursorAdapter を作成しました。ボタンがクリックされたときに、基になる からの追加のデータセットをonClick
使用して、新しいアプリケーションを開始したいと考えています。Intent
Cursor
問題はonClick
、ボタンの機能が呼び出されると、カーソルがデータベースの正しい行を指していないように見えることです (これは、リストがスクロールするときにカーソルが別の行を指すように変更されたためだと思います)。
これが私のコードです:
private class WaveFxCursorAdapter extends SimpleCursorAdapter {
public WaveFxCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public void bindView(View v, Context context, Cursor c) {
super.bindView(v, context, c);
ImageButton b = (ImageButton) v.findViewById(R.id.btn_show_spec);
// fchr is correct here:
int fchr = c.getInt(c.getColumnIndex(
WaveDataContentProvider.SiteForecast.FORECAST_PERIOD));
Log.d(TAG, "ChrisB: bindView: FCHR is: " + fchr );
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), SpecDrawActivity.class);
i.setAction(Intent.ACTION_VIEW);
i.putExtra("com.kernowsoft.specdraw.SITENAME", mSitename);
// fchr is NOT CORRECT here! I can't use the fchr from the
// bindView method as Lint tells me this is an error:
int fchr = c.getInt(c.getColumnIndex(
WaveDataContentProvider.SiteForecast.FORECAST_PERIOD));
Log.d(TAG, "bindView: Forecast hour is: " + fchr);
i.putExtra("com.kernowsoft.specdraw.FCHR", fchr);
getActivity().startActivity(i);
}
});
}
上記のコードのコメントからわかるようfchr
に、ログインに出力すると正しいですが、メソッドbindView
では正しくありません。メソッドから変数をonClick
参照しようとしましたが、Andriod Lint はこれを行うことができないと言います:fchr
bindView
onClick
別のメソッドで定義された内部クラス内の非最終変数 fchr を参照できません
fchr
私の質問は次のとおりです。変数をカーソルからonClick
メソッドに正しく渡すにはどうすればよいですか?
ありがとう!