2017-10-07 61 views
1

我想定義一個自定義SimpleCursorAdapter類,它將用於填充ListView的行。爲了向後兼容,我使用了v4.widget.SimpleCursorAdapter庫。我在代碼的以下兩部分中遇到問題。用於填充ListView行的自定義SimpleCursorAdapter

在構造函數中,我使用

super(context,layout,c,from,to); 

同時,不贊成這種方式,我不知道如何修改它。

此外,在

alarm_activated = (ToggleButton)row.findViewById(R.id.alarm_activated); 

「行」解決不了的,我不知道如何來引用問題的行。 (這個語法在ArrayAdapter中工作,我希望它也可以在SimpleCursorAdapter中工作...)。

也許,我的代碼的一些其他部分(以下發現)是不正確的。

class AlarmRowAdapter extends SimpleCursorAdapter { 

    private Context mContext; 
    private Context appContext; 
    private int layout; 
    private Cursor cr; 
    private final LayoutInflater inflater; 

    public AlarmRowAdapter(Context context,int layout, Cursor c,String[] from,int[] to) { 
     super(context,layout,c,from,to); 
     this.layout=layout; 
     this.mContext = context; 
     this.inflater=LayoutInflater.from(context); 
     this.cr=c; 
    } 

    @Override 
    public View newView (Context context, Cursor cursor, ViewGroup parent) { 
     return inflater.inflate(layout, null); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     super.bindView(view, context, cursor); 

     alarm_activated = (ToggleButton)row.findViewById(R.id.alarm_activated); 

     if (activationInt == 1) { 
      alarm_activated.setChecked(true); 
      alarm_activated.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY); 
     } else { 
      alarm_activated.setChecked(false); 
     } 

     alarm_activated.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        buttonView.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY); 
       } else { 
        buttonView.getBackground().setColorFilter(Color.LTGRAY, PorterDuff.Mode.MULTIPLY); 
       } 
      } 
     }); 

    } 

} 

謝謝你的幫忙。 (請參見上述評論)由Mike M.做出

Ĵ

+0

在'bindView()'中,使用'view'而不是'row'。然後使用不被棄用的構造函數:https://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.html#SimpleCursorAdapter(android.content.Context,%20int,%20android.database.Cursor, %20java.lang.String [],%20int [],%20int)。 –

+0

謝謝Mike。按照建議,我用視圖而不是行,並且這已解決了問題。同時,關於構造函數,我正在使用尚未棄用的構造函數(如代碼中所示)。但是,看起來我必須添加「super(context,layout,c,from,to);」 (在Android Studio中顯示「super」關鍵字,指出它已被棄用)。如果我刪除了那一部分,我得到一個錯誤,指出在所使用的支持庫中沒有可用的默認構造函數。 J – JF0001

+0

「我正在使用尚未棄用的程序(如代碼所示)」。 - 我在任何地方都看不到。你錯過了'flags'參數。 –

回答

1

以下建議,這裏是萬一別人的工作代碼會發現它很有用。另外,請注意,在開發我的初始代碼時,我使用了在此link中找到的示例(感謝Bobbake4瞭解該代碼)。

class AlarmRowAdapter extends SimpleCursorAdapter { 

    private Context mContext; 
    private Context appContext; 
    private int layout; 
    private Cursor cr; 
    private final LayoutInflater inflater; 


    public AlarmRowAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
     super(context,layout,c,from,to, flags); 
     this.layout=layout; 
     this.mContext = context; 
     this.inflater=LayoutInflater.from(context); 
     this.cr=c; 
    } 

    @Override 
    public View newView (Context context, Cursor cursor, ViewGroup parent) { 
     return inflater.inflate(layout, null); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     super.bindView(view, context, cursor); 

     alarm_activated = (ToggleButton)view.findViewById(R.id.alarm_activated); 

     if (activationInt == 1) { 
      alarm_activated.setChecked(true); 
      alarm_activated.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY); 
     } else { 
      alarm_activated.setChecked(false); 
     } 

     alarm_activated.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        buttonView.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY); 
       } else { 
        buttonView.getBackground().setColorFilter(Color.LTGRAY, PorterDuff.Mode.MULTIPLY); 
       } 
      } 
     }); 

    } 

} 

Ĵ

1

對於標準的構造函數添加一個標誌參數:CursorAdapter doc.

super (context,layout,c, from,to, 0); 

而且你要使用row.findViewById但變量行不存在。由於參數是view,所以應該使用view.findViewById

+0

謝謝Nabin。 J – JF0001

+0

不客氣。 :) –

相關問題