显示 TimePickerDialog 片段错误 [英] Showing TimePickerDialog fragment error

查看:20
本文介绍了显示 TimePickerDialog 片段错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从片段中的按钮启动时间选择器

我已经阅读了有关错误的相同问题的帖子,但代码与我开始的内容不匹配,这就是我发布此内容的原因

TimePickerFragment.java

public class TimePickerFragment extends DialogFragment {@非空@覆盖公共对话框 onCreateDialog(Bundle savedInstanceState) {日历 c = Calendar.getInstance();int cHour= c.get(Calendar.HOUR_OF_DAY);int cMinute = c.get(Calendar.MINUTE);返回新的 TimePickerDialog(getActivity(),(TimePickerDialog.OnTimeSetListener) getActivity(), cHour, cMinute, android.text.format.DateFormat.is24HourFormat(getActivity()));}}

我使用 BluetoothChat 应用程序并对其进行编辑

在BluetoothFrament.java中

@Overridepublic 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);潮湿进度 = (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)私人无效 setupChat() {Log.d(TAG, "setupChat()");日历日历 = Calendar.getInstance();SimpleDateFormat mdformat = new SimpleDateFormat("HH:mm");strDate = "" + mdformat.format(calendar.getTime());//使用返回键的侦听器初始化 compose 字段mOutEditText.setOnEditorActionListener(mWriteListener);//tabHost.setup();尝试 {buttonGoSched.setOnClickListener(new View.OnClickListener() {@覆盖公共无效onClick(查看视图){android.support.v4.app.DialogFragment timePicker = new TimePickerFragment();timePicker.show(getActivity().getSupportFragmentManager(), "时间选择器");}});}catch(异常e){Log.e(TAG,"sched 错误:"+e);}//使用用于单击事件的侦听器初始化发送按钮mSendButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {//使用编辑文本小部件的内容发送消息查看视图 = getView();如果(空!= 视图){TextView textView = (TextView) view.findViewById(R.id.edit_text_out);String message = textView.getText().toString();发送消息(消息);Log.d(TAG, "水泵持续时间设置为:"+message);}}});

Logcat中.

04-10 18:55:22.647 17937-17937/com.example.android.bluetoothplantdroid E/AndroidRuntime:致命异常:main进程:com.example.android.bluetoothplantdroid,PID:17937java.lang.ClassCastException: com.example.android.bluetoothplantdroid.MainActivity 无法转换为 android.app.TimePickerDialog$OnTimeSetListener在 com.example.android.bluetoothplantdroid.TimePickerFragment.onCreateDialog(TimePickerFragment.java:23)在 android.support.v4.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:310)在 android.support.v4.app.Fragment.performGetLayoutInflater(Fragment.java:1132)在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)在 android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)在 android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)在 android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)在 android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)在 android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700)在 android.os.Handler.handleCallback(Handler.java:815)在 android.os.Handler.dispatchMessage(Handler.java:104)在 android.os.Looper.loop(Looper.java:207)在 android.app.ActivityThread.main(ActivityThread.java:5728)在 java.lang.reflect.Method.invoke(Native Method)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

我正在尝试改变

timePicker.show(getActivity().getSupportFragmentManager(), "时间选择器");

timePicker.show(getSupportFragmentManager(), "时间选择器");

因为是原码但它有错误无法解析方法'getSupportFragmentManager()'"

解决方案

MainActivity 不能强制转换为android.app.TimePickerDialog$OnTimeSetListener

这意味着您不能调用在子类中声明的方法.

问题来了

 android.support.v4.app.DialogFragment timePicker = new TimePickerFragment();

试试

TimePickerFragment timePicker = new TimePickerFragment();timePicker.show(getActivity().getSupportFragmentManager(), "时间选择器");

<块引用>

无法解析方法‘getSupportFragmentManager()’"

确保您的 ROOT Activity extends

  • AppCompatActivity/FragmentActivity

你用过吗?

import android.support.v4.app.DialogFragment;导入 android.support.v4.app.Fragment;导入 android.support.v4.app.FragmentManager;

I am trying to launch a timepicker from a button in a fragment

I've read post regarding the same problems about the Error but the codes doesn't match on what I have started thats why i posted this

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()));
    }
}

I use the BluetoothChat application and edit it

in the 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);
            }
        }
    });

In 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)

I'm trying to change the

timePicker.show(getActivity().getSupportFragmentManager(), "time picker");

to

timePicker.show(getSupportFragmentManager(), "time picker"); 

Because it is the original code But it has error "Cannot Resolve Method 'getSupportFragmentManager()'"

解决方案

MainActivity cannot be cast to android.app.TimePickerDialog$OnTimeSetListener

Which means you can not call a method which is declared in the subclass.

Problem coming form

 android.support.v4.app.DialogFragment timePicker = new TimePickerFragment(); 

Try with

TimePickerFragment  timePicker = new TimePickerFragment ();
timePicker.show(getActivity().getSupportFragmentManager(), "time picker");

"Cannot Resolve Method 'getSupportFragmentManager()'"

Make sure your ROOT Activity extends

  • AppCompatActivity/FragmentActivity

Did you using ?

import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

这篇关于显示 TimePickerDialog 片段错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆