使用 DatePicker 和 TimePicker 对话框 - Eclipse 中的 Android Java

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15561112/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 20:14:16  来源:igfitidea点击:

Using DatePicker and TimePicker dialog boxes - Android Java in Eclipse

javaandroideclipsedatepickertimepicker

提问by Brodoin

I have no errors on the code, but when I launch I get a fatal error in my main XML page that says,

我的代码没有错误,但是当我启动时,我的主 XML 页面中出现一个致命错误,上面写着,

03-21 22:00:31.849: E/AndroidRuntime(606): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{countrycabin.ist236/countrycabin.ist236.Main}: java.lang.NullPointerException

03-21 22:00:31.849: E/AndroidRuntime(606): java.lang.RuntimeException: 无法实例化活动 ComponentInfo{countrycabin.ist236/countrycabin.ist236.Main}: java.lang.NullPointerException

I'm not sure what is causing the problem. As I said, I have no errors. I made a program very similar to this that worked fine, I just added the TimePicker to this one.

我不确定是什么导致了这个问题。正如我所说,我没有错误。我制作了一个与此非常相似的程序,效果很好,我只是将 TimePicker 添加到了这个程序中。

What I'm trying to do is pretty straightforward. I'm making the program launch, and when I click a button, a dialog displays that shows either a DatePicker or TimePicker, and when someone selects a date words display in a TextView at the bottom. I'm unable to test even this, however, as it will not even launch. My emulator tells me it will not respond.

我想要做的很简单。我正在启动程序,当我单击一个按钮时,会显示一个对话框,其中显示 DatePicker 或 TimePicker,并且当有人选择显示在底部 TextView 中的日期词时。但是,我什至无法对此进行测试,因为它甚至无法启动。我的模拟器告诉我它不会响应。

I'm using Honeycomb for this, as stated in a textbook.

正如教科书中所述,我为此使用了 Honeycomb。

Here is all my code.

这是我所有的代码。

Main Manifest XML

主清单 XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="countrycabin.ist236"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="11" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="countrycabin.ist236.Main"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

main XML

主 XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/LinearLayout1"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal"
  tools:context=".Main" >

<ImageView
    android:id="@+id/imgCabin"
    android:layout_width="282dp"
    android:layout_height="match_parent"
    android:contentDescription="@string/strCabin"
    android:src="@drawable/cabin" />

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableRow>



        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="wrap_content"
            android:background="#666FFF"
            android:padding="50dp"
            android:text="@string/strTitle"
            android:textSize="40sp"
            android:typeface="serif" />


    </TableRow>

    <TableRow>



        <TextView
            android:id="@+id/txtDesc"
            android:layout_width="wrap_content"
            android:padding="25dp"
            android:text="@string/strDesc"
            android:textSize="30sp" />

        </TableRow>



        <RadioGroup
            android:id="@+id/radio"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.20"
            android:contentDescription="@string/strRad" >

            <RadioButton
                android:id="@+id/radCabin1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="250dp"
                android:checked="true"
                android:text="@string/strCabinOne"
                android:textSize="25sp" />

            <RadioButton
                android:id="@+id/radCabin2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="250dp"
                android:text="@string/strCabinTwo"
                android:textSize="25sp" />

        </RadioGroup>



    <TableRow>

        <Button
            android:id="@+id/btnDate"
            android:layout_width="50dp"

            android:padding="20sp"
            android:text="@string/strDate"
            android:textSize="25sp" />



    </TableRow>

    <TableRow>

          <Button
             android:id="@+id/btnTime"
             android:layout_width="50dp"

             android:padding="20sp"
             android:text="@string/strTime"
             android:textSize="25sp" />


    </TableRow>

       <TableRow>

        <TextView
            android:id="@+id/txtDate"
            android:layout_gravity="center"
            android:padding="20dp"
            android:textSize="25sp" />

    </TableRow>

       <TableRow>

            <TextView
                android:id="@+id/txtTime"
                android:layout_gravity="center"
                android:padding="20dp"
                android:textSize="25sp" />

       </TableRow>


</TableLayout>

</LinearLayout>

Main class (Java code)

主类(Java代码)

package countrycabin.ist236;

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker; 
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.TimePicker;

public class Main extends Activity {

private int currentYear;
private int currentMonth;
private int currentDay;
static final int DATE_DIALOG_ID = 0;
static final int TIME_DIALOG_ID = 1;
int hour;
int minute;
String cabin1 = "The Wooden Castle";
String cabin2 = "Cozy Little Spot";
private Button btDate;
private Button btTime;
private TextView timeDisplay;
private TextView dateDisplay;

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

    timeDisplay = (TextView) findViewById(R.id.txtTime);

    dateDisplay = (TextView) findViewById(R.id.txtDate);

    btDate = (Button) findViewById(R.id.btnDate);

    btTime = (Button) findViewById(R.id.btnTime);

    btDate.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID);

        }
    });
    final Calendar c = Calendar.getInstance();
    currentYear = c.get(Calendar.YEAR);
    currentMonth = c.get(Calendar.MONTH);
    currentDay = c.get(Calendar.DAY_OF_MONTH);



     btTime.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View v){
        showDialog(TIME_DIALOG_ID);
    }
});
final Calendar d = Calendar.getInstance();
hour = d.get(Calendar.HOUR_OF_DAY);
minute = d.get(Calendar.MINUTE);



}


protected Dialog onCreateDialog(int id) {
    switch(id){
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, reservationDate, currentYear, currentMonth, currentDay);
    case TIME_DIALOG_ID:
        return new TimePickerDialog(this, timeDate, hour, minute, false);
    }
    return null;
}

private DatePickerDialog.OnDateSetListener reservationDate = new DatePickerDialog.OnDateSetListener() {
    final RadioButton c1 = (RadioButton) findViewById(R.id.radCabin1);
    final RadioButton c2 = (RadioButton) findViewById(R.id.radCabin2);
        @Override
    public void onDateSet(DatePicker view, int year, int month, int day){
    if(c1.isChecked()){


        dateDisplay.setText("Your rental time is set for " + (month + 1) + "-" + day + "-" + year + " to " + (month + 1) + "-" + (day + 3) + "-" + year + " in " + cabin1 + ".");
    }
    if(c2.isChecked()){
        dateDisplay.setText("Your rental time is set for " + (month + 1) + "-" + day + "-" + year + " to " + (month + 1) + "-" + (day + 3) + "-" + year + " in " + cabin2 + ".");
    }
    }

};

private TimePickerDialog.OnTimeSetListener timeDate = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hours, int minutes) {
        timeDisplay.setText("Your arrival time will be at " + hours + ":" + minutes + ".");
    }
};



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

 }

回答by Dhaval Parmar

Check this Code: Its working fine now.

检查此代码:它现在工作正常。

enter image description here

在此处输入图片说明

I have made some change in XML file as well as in Your Activity now its working fine

我对 XML 文件以及您的活动进行了一些更改,现在它可以正常工作

But You have to made some changes depend on your requirement.

但是您必须根据您的要求进行一些更改。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imgCabin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="strCabin"
        android:src="@drawable/ic_launcher" />

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TableRow>

            <TextView
                android:id="@+id/txtTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#666FFF"
                android:text="strTitle"
                android:textSize="40sp"
                android:typeface="serif" />
        </TableRow>

        <TableRow>

            <TextView
                android:id="@+id/txtDesc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="strDesc"
                />
        </TableRow>

        <TableRow>

            <RadioGroup
                android:id="@+id/radio"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="strRad" >

                <RadioButton
                    android:id="@+id/radCabin1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="250dp"
                    android:checked="true"
                    android:text="strCabinOne"
                    android:textSize="25sp" />

                <RadioButton
                    android:id="@+id/radCabin2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="250dp"
                    android:text="strCabinTwo"
                    android:textSize="25sp" />
            </RadioGroup>
        </TableRow>

        <TableRow>

            <Button
                android:id="@+id/btnDate"
                android:layout_width="50dp"
                android:padding="20sp"
                android:text="strDate"
                android:textSize="25sp" />
        </TableRow>

        <TableRow>

            <Button
                android:id="@+id/btnTime"
                android:layout_width="50dp"
                android:padding="20sp"
                android:text="strTime"
                android:textSize="25sp" />
        </TableRow>

        <TableRow>

            <TextView
                android:id="@+id/txtDate"
                android:layout_gravity="center"
                android:padding="20dp"
                android:textSize="25sp" />
        </TableRow>

        <TableRow>

            <TextView
                android:id="@+id/txtTime"
                android:layout_gravity="center"
                android:padding="20dp"
                android:textSize="25sp" />
        </TableRow>
    </TableLayout>

</LinearLayout>

Activity :

活动 :

public class Main extends Activity {

    private int currentYear;
    private int currentMonth;
    private int currentDay;
    static final int DATE_DIALOG_ID = 0;
    static final int TIME_DIALOG_ID = 1;
    int hour;
    int minute;
    String cabin1 = "The Wooden Castle";
    String cabin2 = "Cozy Little Spot";
    private Button btDate;
    private Button btTime;
    private TextView timeDisplay;
    private TextView dateDisplay;
    private RadioButton c1;
    private RadioButton c2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Calendar c = Calendar.getInstance();
        currentYear = c.get(Calendar.YEAR);
        currentMonth = c.get(Calendar.MONTH);
        currentDay = c.get(Calendar.DAY_OF_MONTH);
        hour = c.get(Calendar.HOUR_OF_DAY);
        minute = c.get(Calendar.MINUTE);

        timeDisplay = (TextView) findViewById(R.id.txtTime);
        dateDisplay = (TextView) findViewById(R.id.txtDate);
        btDate = (Button) findViewById(R.id.btnDate);
        btTime = (Button) findViewById(R.id.btnTime);
        c1 = (RadioButton) findViewById(R.id.radCabin1);
        c2 = (RadioButton) findViewById(R.id.radCabin2);
        btDate.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                showDialog(DATE_DIALOG_ID);
            }
        });
        btTime.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                showDialog(TIME_DIALOG_ID);
            }
        });
    }

    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this, reservationDate, currentYear,
                    currentMonth, currentDay);
        case TIME_DIALOG_ID:
            return new TimePickerDialog(this, timeDate, hour, minute, false);
        }
        return null;
    }

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

        public void onDateSet(DatePicker view, int year, int month, int day) {
            if (c1.isChecked()) {

                dateDisplay.setText("Your rental time is set for "
                        + (month + 1) + "-" + day + "-" + year + " to "
                        + (month + 1) + "-" + (day + 3) + "-" + year + " in "
                        + cabin1 + ".");
            }
            if (c2.isChecked()) {
                dateDisplay.setText("Your rental time is set for "
                        + (month + 1) + "-" + day + "-" + year + " to "
                        + (month + 1) + "-" + (day + 3) + "-" + year + " in "
                        + cabin2 + ".");
            }
        }

    };

    private TimePickerDialog.OnTimeSetListener timeDate = new TimePickerDialog.OnTimeSetListener() {

        public void onTimeSet(TimePicker view, int hours, int minutes) {
            timeDisplay.setText("Your arrival time will be at " + hours + ":"
                    + minutes + ".");
        }
    };

    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}