0

1 つのアクティビティに 3 つのボタンが含まれています。最初のボタンは、EditText を使用してカスタム AlertDialog を起動するために使用されます。2 番目のボタンは、DatePicker を開く必要があります。3 番目のボタンは TimePicker を開く必要があります。最初のボタンは正常に機能し、2 番目のボタンに必要なコードも用意されていますが、そのコードを機能させる唯一の方法は、別のアクティビティを作成することでした。

これら 3 つすべてを同じアクティビティに実装するには、どうすればよいですか? それは可能ですか、私はこのすべてにかなり慣れていないので、基本的な提案から高度な提案まで素晴らしいでしょう!!

3 つのボタンを含むアクティビティのコードを次に示します。これらはすべて、対応する 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();

}

}

4

2 に答える 2

2

ダイアログフラグメントを使用して DatePicker と 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
    }
}

次のように、ボタンからタイムピッカーを使用できます。

あなたのxmlで:

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

次に、あなたの活動で:

public void showTimePickerDialog(View v) {
    FragmentManager manager = getSupportFragmentManager();
    DialogFragment timePickerFragment = new TimePickerFragment();
    timePickerFragment.show(manager, "timePicker");
}
于 2013-05-01T00:11:55.930 に答える
0

日付と時刻の選択ダイアログでこのコードを試してください

@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;
}
  }
于 2013-05-11T07:26:49.347 に答える