我創建了一個自定義的SimpleCursorAdapter,其中我已覆蓋bindView
,因此我可以在列表項佈局中連接ImageButton的onClick
偵聽器。我想在使用Intent
以及底層Cursor
的一些額外數據集單擊按鈕時啓動一個新應用程序。自定義SimpleCursorAdapter - onClickListener重載bindView問題
問題是,當按鈕的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
方法不正確。我試圖從onClick
方法引用fchr
變量bindView
,但Andriod的皮棉告訴我,我不能這樣做:
不能引用非最終變量FCHR在不同的方法定義的內部類中
我的問題是:如何正確地將光標的fchr
變量傳遞給onClick
方法?
謝謝!
如果我在聲明變量類,我仍然得到相同的Lint錯誤。那麼是否會使變量最終產生影響? – ccbunney 2013-04-20 09:07:27
檢查我編輯的答案。 – 2013-04-20 09:08:05
對不起 - 我的第一條評論是不正確的。在類中聲明變量不會產生lint錯誤,但它仍會返回錯誤的fchr。做出可變的最終作品,但這是實現此目的的推薦方法嗎?謝謝! – ccbunney 2013-04-20 09:14:55