package nliveroid.nlr.main; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.preference.Preference; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ScrollView; public class AutoUpdatePreference extends Preference { private Context context; private int defaultValue = -1; public AutoUpdatePreference(Context context,AttributeSet attrs) { this(context); } public AutoUpdatePreference(Context context) { super(context); setWidgetLayoutResource(R.layout.comment_update_pref); this.context = context; } /* * Preference のために、ビューとデータをバインドする * レイアウトからカスタムビューを参照しプロパティを設定するのに適する * スーパークラスの実装の呼び出しを確実に行うこと */ @Override protected void onBindView(View view){ //チェックが有効かどうか //nullはありえない+参照が同じなのでゲッターのある違うクラス(NLiveRoid)から取得してもOKと想定 CheckBox check = (CheckBox)view.findViewById(R.id.auto_update_check); final Button intervalButton = (Button)view.findViewById(R.id.auto_update_button); NLiveRoid app = null; check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton compoundbutton, boolean flag) { intervalButton.setVisibility(View.VISIBLE);//何故か初回-1で分岐してもdisableにならない NLiveRoid app = (NLiveRoid)context.getApplicationContext(); if(!flag){//自動更新無効 app.setDetailsMapValue("auto_comment_update", "-1"); intervalButton.setVisibility(View.INVISIBLE); }else{ if(defaultValue < 0){ defaultValue = 2; } app.setDetailsMapValue("auto_comment_update", String.valueOf(defaultValue)); intervalButton.setVisibility(View.VISIBLE); } } }); try{ app = (NLiveRoid)context.getApplicationContext(); defaultValue = Integer.parseInt(app.getDetailsMapValue("auto_comment_update")); setButtonEvent(intervalButton); //有効じゃなかったらボタンをdisableにするsetEnableだと初期時に何故かセットされてくれなかった if(defaultValue > 0){ check.setChecked(true); intervalButton.setVisibility(View.VISIBLE); }else{ check.setChecked(false); intervalButton.setVisibility(View.INVISIBLE); } }catch(NumberFormatException e){ e.printStackTrace(); return; }catch(Exception e){ e.printStackTrace(); return; } super.onBindView(view); } private void setButtonEvent(Button bt){ if (bt != null && Details.getPref() != null ) { bt.setOnClickListener(new OnClickListener(){ @Override public void onClick(View view) { ScrollView sv = new ScrollView(context); final NumberPicker np = new NumberPicker(context); np.setRange(1, 10); if(defaultValue <= 0){ np.setCurrent(2); }else{ np.setCurrent(defaultValue); } sv.addView(np,-1,-1); new AlertDialog.Builder(context) .setTitle("更新間隔(分)") .setView(sv) .setPositiveButton("OK",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { NLiveRoid app = (NLiveRoid)context.getApplicationContext(); defaultValue = np.getCurrent(); app.setDetailsMapValue("auto_comment_update", String.valueOf(np.getCurrent())); } }) .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create().show(); } }); } } }