Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在同一类/活动中使用时间选择器、日期选择器和AlertDialog_Java_Android_Android Activity_Fragment - Fatal编程技术网

Java 在同一类/活动中使用时间选择器、日期选择器和AlertDialog

Java 在同一类/活动中使用时间选择器、日期选择器和AlertDialog,java,android,android-activity,fragment,Java,Android,Android Activity,Fragment,我在一个活动中包含了3个按钮。第一个按钮用于启动带有EditText的自定义AlertDialog。第二个按钮需要打开一个日期选择器。第三个按钮需要打开时间选择器。我的第一个按钮工作正常,第二个按钮的代码也正常,但我能让代码正常工作的唯一方法是创建一个不同的活动 我需要做什么才能在同一个活动中实现这三个方面?有可能吗,我对所有这些东西都很陌生,所以任何从基础到高级的建议都会很棒 下面是带有三个按钮的活动代码,所有这些按钮都在相应的XML文件中声明。这是我目前拥有的代码,这意味着只有AlertDi

我在一个活动中包含了3个按钮。第一个按钮用于启动带有EditText的自定义AlertDialog。第二个按钮需要打开一个日期选择器。第三个按钮需要打开时间选择器。我的第一个按钮工作正常,第二个按钮的代码也正常,但我能让代码正常工作的唯一方法是创建一个不同的活动

我需要做什么才能在同一个活动中实现这三个方面?有可能吗,我对所有这些东西都很陌生,所以任何从基础到高级的建议都会很棒

下面是带有三个按钮的活动代码,所有这些按钮都在相应的XML文件中声明。这是我目前拥有的代码,这意味着只有AlertDialog的代码工作正常:

package com.example.test_project;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;


public class NewWorkout extends Activity  {

@Override
protected void onCreate(Bundle onSaveInstanceState) {
    super.onCreate(onSaveInstanceState);
    setContentView(R.layout.activity_new_workout);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.new_workout, menu);
    return true;
}
public void timeOfWorkout(View view){
    Intent intent = new Intent(this, TimePickerFragment.class);
    startActivity(intent);
}


    int mYear;
    int mMonth;
    int mDay;

    TextView mDateDisplay;


    final int DATE_DIALOG_ID = 0;

    public void onCreate1(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_workout);

        mDateDisplay = (TextView) findViewById(R.id.timeOfWorkoutTextView);        
        Button button = (Button) findViewById(R.id.dateOfWorkoutButton);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // get the current date
                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);

                // display the current date
                updateDisplay();
            }
            });
                DatePickerDialog.OnDateSetListener mDateSetListener =
                        new DatePickerDialog.OnDateSetListener() {
                            public void onDateSet(DatePicker view, int year, 
                                                  int monthOfYear, int dayOfMonth) {
                                mYear = year;
                                mMonth = monthOfYear;
                                mDay = dayOfMonth;
                                updateDisplay();






                            }
                };
    }








private void updateDisplay() {
     this.mDateDisplay.setText(
                new StringBuilder()
                        // Month is 0 based so add 1
                        .append(mMonth + 1).append("-")
                        .append(mDay).append("-")
                        .append(mYear).append(" "));



}

public void nameOfWorkout(View view){
    AlertDialog.Builder alert = new AlertDialog.Builder(this);

    alert.setTitle("Enter a Name for This Workout");

    // Set an EditText view to get user input 
    final EditText input = new EditText(this);
    alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
      String value = input.getText().toString();
      TextView edit = (TextView) findViewById(R.id.nameOfWorkoutTextView);
      edit.setText(value);
      }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        // Canceled.
      }
    });

    alert.show();

}

}

您应该使用对话框片段实现日期选择器和时间选择器

这是我们的一些样品

您可以使用这样的时间选择器按钮:

在xml中:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="@string/pick_time" 
    android:onClick="showTimePickerDialog" />

请在“日期和时间选择器”对话框中尝试此代码

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

}


private void calendarDataInit() {

    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    mHour = c.get(Calendar.HOUR_OF_DAY);
    mMinute = c.get(Calendar.MINUTE);

}


private void initViews() {

    imgViewDatePicker = (ImageView) findViewById(R.id.imgViewDatePicker);
    imgViewTimePicker = (ImageView) findViewById(R.id.imgViewTimePicker);
    imgViewDatePicker.setOnClickListener(this);
    imgViewTimePicker.setOnClickListener(this);     

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.imgViewDatePicker:
        showDialog(DATE_DIALOG_ID);
        break;

    case R.id.imgViewTimePicker:
        showDialog(TIME_DIALOG_ID);
        break;




private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, 
            int monthOfYear, int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;
        updateDate();
    }

    private void updateDate() {
        adapter.resetData();
        StringBuilder dateEvent = new StringBuilder().append(mYear).append("-").append(padMonth(mMonth + 1))
                .append("-")
                .append(mDay);
        editTxtDtae.setText(dateEvent);
        editTxtDtae.requestFocus();


    }
};

private static String padMonth(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}


// Timepicker dialog generation
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mHour = hourOfDay;
        mMinute = minute;
        updatetime();
    }

    private void updatetime() {

        adapter.resetData();

        String am_pm;

        if(mHour > 12) {
            am_pm = "PM";
            mHour = mHour - 12;
        } else {
            am_pm = "AM";
        } 

        timeEvent = new StringBuilder().append(mHour)
                .append(":").append(mMinute).append(am_pm);
        editTxtTime.setText(timeEvent);
    }


};
private static String pad(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this,
                mDateSetListener,
                mYear, mMonth, mDay);


    case TIME_DIALOG_ID:
        return new TimePickerDialog(this,
                mTimeSetListener, mHour, mMinute, false);

    }
    return null;
}
  }

你能给我们看一下你与这个问题相关的代码吗?是的,从你的活动中添加源代码,所以你是说我可以在同一个类中为时间和日期选择器使用此代码,还可以为AlertDialog插入代码,所有这些都在这个一次性PickerFragment类中??我找不到getSupportFragmentManager().您是指getSupportFragmentManager()?这是活动中的一种方法。是的,我试图获得该方法,但在该方法上出现错误。ADT建议我将方法更改为getChildFragmentManager或getFragmentManager。我正在为低于android 3.0的版本创建项目,因此我需要将android支持库添加到我的项目中以访问对话框片段。如果你知道任何我可以下载lib文件的链接,请与我分享。谢谢你的回复。
public void showTimePickerDialog(View v) {
    FragmentManager manager = getSupportFragmentManager();
    DialogFragment timePickerFragment = new TimePickerFragment();
    timePickerFragment.show(manager, "timePicker");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_event_details_list);
    calendarDataInit();
    initViews();

}


private void calendarDataInit() {

    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    mHour = c.get(Calendar.HOUR_OF_DAY);
    mMinute = c.get(Calendar.MINUTE);

}


private void initViews() {

    imgViewDatePicker = (ImageView) findViewById(R.id.imgViewDatePicker);
    imgViewTimePicker = (ImageView) findViewById(R.id.imgViewTimePicker);
    imgViewDatePicker.setOnClickListener(this);
    imgViewTimePicker.setOnClickListener(this);     

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.imgViewDatePicker:
        showDialog(DATE_DIALOG_ID);
        break;

    case R.id.imgViewTimePicker:
        showDialog(TIME_DIALOG_ID);
        break;




private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, 
            int monthOfYear, int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;
        updateDate();
    }

    private void updateDate() {
        adapter.resetData();
        StringBuilder dateEvent = new StringBuilder().append(mYear).append("-").append(padMonth(mMonth + 1))
                .append("-")
                .append(mDay);
        editTxtDtae.setText(dateEvent);
        editTxtDtae.requestFocus();


    }
};

private static String padMonth(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}


// Timepicker dialog generation
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mHour = hourOfDay;
        mMinute = minute;
        updatetime();
    }

    private void updatetime() {

        adapter.resetData();

        String am_pm;

        if(mHour > 12) {
            am_pm = "PM";
            mHour = mHour - 12;
        } else {
            am_pm = "AM";
        } 

        timeEvent = new StringBuilder().append(mHour)
                .append(":").append(mMinute).append(am_pm);
        editTxtTime.setText(timeEvent);
    }


};
private static String pad(int c) {
    if (c >= 10)
        return String.valueOf(c);
    else
        return "0" + String.valueOf(c);
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this,
                mDateSetListener,
                mYear, mMonth, mDay);


    case TIME_DIALOG_ID:
        return new TimePickerDialog(this,
                mTimeSetListener, mHour, mMinute, false);

    }
    return null;
}
  }