我正在尝试从片段中的按钮启动时间戳
我已经阅读了有关错误的相同问题的帖子,但代码与我开始的内容并不匹配,这就是为什么我发布了这个
TimePickerFragment.java
public class TimePickerFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int cHour= c.get(Calendar.HOUR_OF_DAY);
int cMinute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(),(TimePickerDialog.OnTimeSetListener) getActivity(), cHour, cMinute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
我使用 BluetoothChat 应用程序进行编辑
BluetoothFrament.java中的
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mMoistIn = (TextView) view.findViewById(R.id.moistIn);
mTempIn = (TextView) view.findViewById(R.id.tempIn);
mOutEditText = (EditText) view.findViewById(R.id.edit_text_out);
mSendButton = (Button) view.findViewById(R.id.button_send);
moistProgress = (CircleProgress)view.findViewById(R.id.moistcircle_progress);
pbTemp = (CircleProgress)view.findViewById(R.id.tempcircle_progress);
buttonGoSched = (Button)view.findViewById(R.id.gotoSched);
//tempSwitch = (Switch)view.findViewById(R.id.switch1);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void setupChat() {
Log.d(TAG, "setupChat()");
Calendar calendar = Calendar.getInstance();
SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm");
strDate = "" + mdformat.format(calendar.getTime());
// Initialize the compose field with a listener for the return key
mOutEditText.setOnEditorActionListener(mWriteListener);
// tabHost.setup();
try {
buttonGoSched.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
android.support.v4.app.DialogFragment timePicker = new TimePickerFragment(); timePicker.show(getActivity().getSupportFragmentManager(), "time picker");
}
});
}catch(Exception e){
Log.e(TAG,"error in sched: "+e);
}
// Initialize the send button with a listener that for click events
mSendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Send a message using content of the edit text widget
View view = getView();
if (null != view) {
TextView textView = (TextView) view.findViewById(R.id.edit_text_out);
String message = textView.getText().toString();
sendMessage(message);
Log.d(TAG, "Water pump duration set to: "+message);
}
}
});
在 Logcat 。
04-10 18:55:22.647 17937-17937/com.example.android.bluetoothplantdroid E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.bluetoothplantdroid, PID: 17937
java.lang.ClassCastException: com.example.android.bluetoothplantdroid.MainActivity cannot be cast to android.app.TimePickerDialog$OnTimeSetListener
at com.example.android.bluetoothplantdroid.TimePickerFragment.onCreateDialog(TimePickerFragment.java:23)
at android.support.v4.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:310)
at android.support.v4.app.Fragment.performGetLayoutInflater(Fragment.java:1132)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5728)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
我试图改变
timePicker.show(getActivity().getSupportFragmentManager(), "time picker");
到
timePicker.show(getSupportFragmentManager(), "time picker");
因为它是原始代码 但它有错误"无法解决方法' getSupportFragmentManager()'"
答案 0 :(得分:1)
无法转换为MainActivity android.app.TimePickerDialog $ OnTimeSetListener
这意味着你不能调用在子类中声明的方法。
问题来自
android.support.v4.app.DialogFragment timePicker = new TimePickerFragment();
尝试
TimePickerFragment timePicker = new TimePickerFragment ();
timePicker.show(getActivity().getSupportFragmentManager(), "time picker");
"无法解决方法' getSupportFragmentManager()'"
确保 ROOT活动 extends
你用过吗?
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
答案 1 :(得分:0)
关于
MainActivity无法强制转换为android.app.TimePickerDialog $ OnTimeSetListener
它正在发生,因为您正在尝试将您的活动转换为OnTimeSetListener
return new TimePickerDialog(getActivity(),(TimePickerDialog.OnTimeSetListener) getActivity(), cHour, cMinute, android.text.format.DateFormat.is24HourFormat(getActivity()));
确保您的活动正在扩展OnTimeSetListener,如果是这样,您可以尝试将其转换为您的活动
return new TimePickerDialog(getActivity(),(MainActivity) getActivity(), cHour, cMinute, android.text.format.DateFormat.is24HourFormat(getActivity()));
因为您的活动将是OnTimeSetListener的实例。
另外,我不建议使用getActivity()从你的片段中获取监听器,如果你的监听器没有附加到你的活动中,那就更好了。
答案 2 :(得分:0)
使用getParentFragment()代替getActivity()。