将 TextView 设置为 timePicker语言 - Android 中的时间



我一直在这里使用本教程来创建时间选择器。 我可以选择时间,但我无法选择时间显示在我的文本视图中。 Java不是我的首选语言,所以这可能是我失败的地方。

这是我的java代码:

import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.TimePicker;
import java.util.Calendar;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //code from: http://developer.android.com/guide/topics/ui/controls/pickers.html
    public void showTimePicker(View v) {
        DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getFragmentManager(), "timePicker");
    }
    public static class TimePickerFragment extends DialogFragment
            implements TimePickerDialog.OnTimeSetListener {
        @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);
            // 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) {
            // Do something with the time chosen by the user - how!?
        }
    }
}

在我的XML中,我让"选择时间"按钮在单击时运行showTimePicker方法,如下所示:

android:onClick="showTimePicker"

我尝试只在 onTimeSet 方法中设置文本字段,但我得到一个空指针异常。然后我想我应该在onCreateDialog中初始化它,但我不知道如何使用findViewById来查找实际的文本视图。 我敢肯定这可能很简单,但我上下搜索过,没有太多运气。感谢您的帮助!

你可以这样做:

1

解决方案1更好):

public class MainActivity extends Activity {
        TextView resultText;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            resultText = (TextView)findViewById(R.id./*YOUR TEXT VIEW ID*/);
        }
        //code from: http://developer.android.com/guide/topics/ui/controls/pickers.html
        public void showTimePicker(View v) {
            DialogFragment newFragment = new TimePickerFragment(resultText);
            newFragment.show(getFragmentManager(), "timePicker");
        }
        public class TimePickerFragment extends DialogFragment
                implements TimePickerDialog.OnTimeSetListener {
             TextView mResultText;
             public TimePickerFragment(TextView textView) {
                mResultText = textView;
            }
            @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);
                // 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) {
                String time = /*CONVERT YOUR TIME FROM hourOfDay and minute*/;
                mResultText.setText(time);
            }
        }
    }

2) 解决方案 2

public class MainActivity extends Activity {
    public TextView mResultText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mResultText = (TextView)findViewById(R.id./*YOUR TEXT VIEW ID*/);
    }
    //code from: http://developer.android.com/guide/topics/ui/controls/pickers.html
    public void showTimePicker(View v) {
        DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getFragmentManager(), "timePicker");
    }
    public class TimePickerFragment extends DialogFragment
            implements TimePickerDialog.OnTimeSetListener {
        @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);
            // 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) {
            String time = /*CONVERT YOUR TIME FROM hourOfDay and minute*/;
            mResultText.setText(time);
        }
    }
}

您实际上可以使用 findViewById ,就像getActivity()您的片段可以访问它正在运行的活动一样,从而可以访问活动内部的视图。

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    TextView textView = (TextView) getActivity().findViewById(R.id.my_text_view);
    textView.setText(String.format("%02d", hourOfDay), String.format("%02d", minute);
}

与将TextView的引用传递给片段相比,应该首选这种简单的解决方案,因为重新实例化片段时,此引用将丢失(请参阅注释)。

最新更新