Android 编辑文本及;onFocusChangeListener

Android 编辑文本及;onFocusChangeListener,android,Android,首先我要感谢你们所有人的帮助。我是个新手,stackoverflow用已有的答案回答了我的大部分问题:-) 对于我当前的项目,我想创建一种日历条目,用户必须为此条目设置日期和时间。 我决定使用EditText并想打开picker@OnFocus on EditText(我知道讨论是否有意义,但我认为这样做是有意义的) 我现在有两个问题: 1) 我无法让OnFocusListener工作:-( 2) 时间选择器始终为am/pm格式,尽管在EditText中它写入24小时格式。我的设备设置为24小时


首先我要感谢你们所有人的帮助。我是个新手,stackoverflow用已有的答案回答了我的大部分问题:-)

对于我当前的项目,我想创建一种日历条目,用户必须为此条目设置日期和时间。 我决定使用EditText并想打开picker@OnFocus on EditText(我知道讨论是否有意义,但我认为这样做是有意义的)

我现在有两个问题:
1) 我无法让OnFocusListener工作:-(
2) 时间选择器始终为am/pm格式,尽管在EditText中它写入24小时格式。我的设备设置为24小时,我没有时间选择器使用24小时,具体取决于设备设置。我知道它可以设置为始终为24小时,但我认为这对于其他不使用24小时的国家来说是令人困惑的,因此它应该取决于设备设置

我希望你能帮助我,修复我的代码,希望不要那么混乱。 提前谢谢

这是我的密码:

public class Test extends ActionBarActivity implements OnFocusChangeListener {

EditText editText, txtDate, txtTime;
Button button, btnDate;

// Variable for storing current date and time
private int mYear, mMonth, mDay, mHour, mMinute;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new  PlaceholderFragment()).commit();
    }

// Force keyboard to open as request focus doesn’t open keyboard
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

// Date & Time Picker Stuff
 txtDate = (EditText) findViewById(R.id.etDate);
    txtTime = (EditText) findViewById(R.id.etTime);

    txtDate.setOnFocusChangeListener(new OnFocusChangeListener());
    txtTime.setOnFocusChangeListener(new OnFocusChangeListener());

}

@Override
public void onFocusChange(View v, boolean hasFocus) {

    if (v == txtDate) {

        // Process to get Current Date
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);

        // Launch Date Picker Dialog
        DatePickerDialog dpd = new DatePickerDialog(this,
                new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year,
                            int monthOfYear, int dayOfMonth) {
                        // Display Selected date in edit text
                        txtDate.setText(dayOfMonth + "-"
                                + (monthOfYear + 1) + "-" + year);

                    }
                }, mYear, mMonth, mDay);
        dpd.show();
    }
    if (v == txtTime) {

        // Process to get Current Time
        final Calendar c = Calendar.getInstance();
        mHour = c.get(Calendar.HOUR_OF_DAY);
        mMinute = c.get(Calendar.MINUTE);

        // Launch Time Picker Dialog
        TimePickerDialog tpd = new TimePickerDialog(this,
                new TimePickerDialog.OnTimeSetListener() {

                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay,
                            int minute) {
                        // Display Selected time in edit text
                        txtTime.setText(hourOfDay + ":" + minute);
                    }
                }, mHour, mMinute, false);
        tpd.show();
    }
 }

要解决焦点侦听器问题,请执行以下操作:


更改
setOnFocusChangeListener(新的OnFocusChangeListener())
设置焦点更改侦听器(此)
将您的
编辑文本
与您定义的方法挂钩

12小时与24小时显示的解决方案:

如果系统设置为24小时,则可以将显示设置为24小时;如果系统设置为12小时格式,则可以将显示设置为12小时

import android.text.format.DateFormat;

// ...

timePicker.setIs24HourView(DateFormat.is24HourFormat(ActionBarActivity.this))

更改
setOnFocusChangeListener(新的OnFocusChangeListener())
设置焦点更改侦听器(此)
将您的
编辑文本
连接到您定义的方法。太好了,这修复了onFocusChange,如此微小的事情让我很挣扎。非常感谢myanimalNow我希望有人知道am/pm-24小时问题的解决方案;-)再次感谢你,但我没法用。我设置了计时器计时器选择器;和//启动时间选择器对话框timePicker.setIs24HourView(DateFormat.is24HourFormat(context));但它说,接触不能解析为一个变量。使用“this”代替lety my app crashmy问题似乎是一个更基本的问题,请参阅我之前的评论,在您的快速回答中编辑
上下文
需要是Android
上下文
(活动、片段等)的实例。如果在侦听器内部使用
,它将引用侦听器本身。要引用包含的活动,您可以尝试
ActionBarActivity。这
感谢您的耐心,但不幸的是,它与
timePicker.setIs24HourView(DateFormat.is24HourFormat(ActionBarActivity.this))
在“//Launch Time Picker Dialog”之后不起作用,但我得到了“没有ActionBarActivity类型的封闭实例在作用域中是可访问的”,在上下文中,我得到一个空指针exceptionSorry,我误读了您的类定义。这将是
Test。这
-
Test
是此代码在其中执行的活动的名称。