我创建了一个自定义的 SimpleCursorAdapter,我已经在其中覆盖了它,bindView
因此我可以onClick
在列表项布局中连接 ImageButton 的侦听器。我想在单击按钮时使用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
方法中却不正确。我尝试从方法中引用fchr
变量,但 Andriod Lint 告诉我我不能这样做:bindView
onClick
不能在不同方法中定义的内部类中引用非最终变量 fchr
我的问题是:如何正确地将fchr
变量从光标传递到onClick
方法中?
谢谢!