2013-05-11 152 views
0

我试图把时间选取器对话框中的复选框放在时间选取器上面,就好像它被选中时间选取器会起作用。
我试过在TimePickerFragment(onCreateDialog)中设置CheckBox,它将复选框放在主活动中,而不是在Time对话框中。 的TimePickerFragment:TimePicker如果复选框被勾选

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 
    private MyAlarmReceiver alarm; 
    //final CheckBox chk=null; 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     final CheckBox chk = (CheckBox) getActivity().findViewById(R.id.chk); 
     if (chk.isChecked()) { 
      chk.setChecked(false); 
     } 
     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, 
       DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     Context con = getActivity(); 
     MainActivity.hour = hourOfDay; 
     MainActivity.min = minute; 
     //Toast.makeText(con, "TimeGet: "+MainActivity.hour+","+MainActivity.min, Toast.LENGTH_LONG).show(); 
     alarm = new MyAlarmReceiver(); 
     if(alarm != null){alarm.setOnetimeTimer(con);} 
     else 
      Toast.makeText(con, "Alarm is null", Toast.LENGTH_SHORT).show(); 
    } 
} 

Main_activity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/layout" 
    android:background="@drawable/back" > 
    <CheckBox 
     android:id="@+id/chk" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/chk" 
     android:checked="true"/> 
    </RelativeLayout> 

任何想法,为什么谢谢!

回答

0

我很确定你会得到一个警告/错误,说:无法访问的代码。

您返回并因此在您达到findViewById之前离开该方法。

// Create a new instance of TimePickerDialog and return it 
return new TimePickerDialog(getActivity(), this, hour, minute, 
    DateFormat.is24HourFormat(getActivity())); 

final CheckBox chk = (CheckBox) findViewById(R.id.chk); 
+0

也谢谢你。但它被放在我的主要活动中的复选框,而不是在我的TimePickerDialog(我已编辑) – elichai2 2013-05-11 19:51:28

2

没有findViewById()方法的片段,因此错误。

因为它似乎你想要去的活动的复选框的参考,得到了活动实例,然后调用findViewById()应该得到期望的结果:

final CheckBox chk = (CheckBox) getActivity().findViewById(R.id.chk); 
if (chk.isChecked()) { 
    chk.setChecked(false); 
} 

而作为ChriZzZ提到,无法访问的代码是另一个编译器错误你应该遇到。

+0

Thanks.But它被放在我的主要活动中的复选框,而不是在我的TimePickerDialog(我已编辑) – elichai2 2013-05-11 19:48:18

+0

@ elichai2如果您希望复选框出现在对话框中,为什么它是活动布局的一部分?我说要查看[文档](http://developer.android.com/reference/android/app/TimePickerDialog.html)并且混淆了所提供的View方法或创建一个普通的Dialog,然后添加一个TimePicker和一个复选框它。 – 2013-05-11 19:55:33

+0

,因为我没有找到我如何创建CheckBox,但没有在xml中创建它,并且我认为它可能适用于我(可能我错了) 那么我该怎么做(我在View方法上什么也看不到在文档中 – elichai2 2013-05-11 19:57:08

相关问题