私のアプリケーションでは、SharedPreference変数にユーザーが格納した値に基づいて配列を宣言する必要があります。問題は、クラスでonCreate()が呼び出される前に配列のサイズを宣言する必要があるため、配列を静的ブロックで宣言する必要があることです。
次の7日間の日付として、親配列を含むExpandableListがアクティビティにあります。
static int plannerSlotCount=7;
static public String[] parent = new String[plannerSlotCount];
static
{
Calendar cal = Calendar.getInstance();
String strdate = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
int i;
for(i=0;i<plannerSlotCount;i++)
{
if (cal != null) {
strdate = sdf.format(cal.getTime());
}
parent[i] = strdate;
cal.add(Calendar.HOUR_OF_DAY,24);
}
}
静的ブロック内で配列を宣言しないと、エラーが発生します。
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
したがって、静的ブロック自体で配列の内容を宣言する必要があります。
表示する日数を変更したいのです(現在は7に設定されています)。そこで、SharedPreference変数に数値を保存し、それにアクセスして配列を初期化することを考えました。
私が直面している問題は、
SharedPreferences preferences = getSharedPreferences(Settings.PREF_SETTINGS_FILE_NAME, MODE_PRIVATE);
final int slotCounter = preferences.getInt("slotCount", 7);
エラーが発生します
Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
これを達成するための可能な方法はありますか?