Datepicker和TimePicker对话框点击两次按钮

时间:2015-04-01 08:00:56

标签: android datepicker timepicker

因此,对于我的生活,我找不到需要在开始日期和开始时间点击两次以打开选择器对话框的原因。我已经多次搜索过这些论坛,而且它们大部分都与编辑文本字段有关,而我的是一个简单的按钮,但onClickListener需要两次点击。提前谢谢。

这是我的班级:

package com.shotsevolved.app

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.parse.FindCallback;
import com.parse.Parse;
import com.parse.ParseException;
import com.parse.ParseGeoPoint;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.SaveCallback;
import java.util.List;


public class DealCreator extends FragmentActivity {


    String mUsername;
    String companyName;
    ParseGeoPoint location;
    String title;
    double mOldPrice;
    double mNewPrice;
    boolean isFree;
    boolean isUnlimited;
    String mDescription;
    int mUses;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Parse.initialize(this, "Ztgl9DAaj4XPrDnS2Ro8jNHiaNnTPFCeF6V1Gm71", "26QMHWwfHmxKfwMvKemaEXH2XsFxpO5sR8Csuo9v");
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_deal_creator);

        final Button create = (Button)findViewById(R.id.createButton);
        final ProgressBar progress = (ProgressBar)findViewById(R.id.progressIcon);
        final LinearLayout view = (LinearLayout)findViewById(R.id.linView);
        final LinearLayout view1 = (LinearLayout)findViewById(R.id.linView1);
        final LinearLayout main = (LinearLayout)findViewById(R.id.mainLinear);
        final CheckBox freeBox = (CheckBox)findViewById(R.id.freeBox);
        final EditText oldPrice = (EditText)findViewById(R.id.oldPrice);
        final EditText newPrice = (EditText)findViewById(R.id.newPrice);
        final CheckBox unlimited = (CheckBox)findViewById(R.id.unlimitedBox);
        final EditText uses = (EditText)findViewById(R.id.uses);
        final Button date = (Button)findViewById(R.id.startDate);
        final Button time = (Button)findViewById(R.id.startTime);


        create.setVisibility(View.INVISIBLE);

        Intent intent = getIntent();
        mUsername = intent.getStringExtra("key");

        ParseQuery<ParseObject> query = ParseQuery.getQuery("appUsers");
        query.whereEqualTo("username", mUsername);
        query.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> user, ParseException e) {
                if(user.size() == 1 && e == null){
                    int admin = user.get(0).getInt("admin");
                    if(admin == 2){

                        ParseQuery<ParseObject> query = ParseQuery.getQuery("AdminNames");
                        query.whereEqualTo("username", mUsername);
                        query.findInBackground(new FindCallback<ParseObject>() {
                            @Override
                            public void done(final List<ParseObject> user, ParseException e) {
                                if(user.size() == 1 && e == null){

                                    unlimited.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                                        @Override
                                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                                            if(isChecked == true){
                                                uses.setVisibility(View.INVISIBLE);
                                                view1.removeView(uses);
                                            }else{
                                                uses.setVisibility(View.VISIBLE);
                                                view1.addView(uses);
                                            }
                                        }
                                    });

                                    freeBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                                        @Override
                                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                                            if(isChecked == true){
                                                oldPrice.setVisibility(View.INVISIBLE);
                                                newPrice.setVisibility(View.INVISIBLE);
                                                view.removeView(oldPrice);
                                                view.removeView(newPrice);
                                            }else{
                                                oldPrice.setVisibility(View.VISIBLE);
                                                newPrice.setVisibility(View.VISIBLE);
                                                view.addView(oldPrice);
                                                view.addView(newPrice);
                                            }
                                        }
                                    });

                                    date.setOnClickListener(new View.OnClickListener() {
                                        @Override
                                        public void onClick(View v) {
                                            showDatePickerDialog(main);
                                        }
                                    });

                                    time.setOnClickListener(new View.OnClickListener() {
                                        @Override
                                        public void onClick(View v) {
                                            showTimePickerDialog(main);
                                        }
                                    });

                                    progress.setVisibility(View.GONE);
                                    view.removeView(progress);
                                    create.setVisibility(View.VISIBLE);

                                    create.setOnClickListener(new View.OnClickListener() {
                                        @Override
                                        public void onClick(View v) {
                                            if(freeBox.isChecked()){
                                                isFree = true;
                                                mOldPrice = 0;
                                                mNewPrice = 0;
                                            }else{

                                                mOldPrice = Double.parseDouble(oldPrice.getText().toString());
                                                mNewPrice = Double.parseDouble(newPrice.getText().toString());
                                                isFree = false;
                                            }
                                            if(unlimited.isChecked()){
                                                isUnlimited = true;
                                                mUses = 0;
                                            }else{

                                                mUses = Integer.parseInt(uses.getText().toString());
                                                isUnlimited = false;
                                            }

                                            //Call create deal class
                                            deal();
                                        }
                                    });
                                }else{
                                    Context context = getApplicationContext();
                                    CharSequence text = "Error!!! Database Hacked!";
                                    int duration = Toast.LENGTH_LONG;
                                    Toast toast = Toast.makeText(context, text, duration);
                                    toast.show();
                                }
                            }
                        });

                    }else{
                        Context context = getApplicationContext();
                        CharSequence text = "Error!!! You are not an Admin!";
                        int duration = Toast.LENGTH_LONG;
                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();
                    }

                }else{
                    Context context = getApplicationContext();
                    CharSequence text = "Error!!! Database Hacked!";
                    int duration = Toast.LENGTH_LONG;
                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
            }
        });
    }

    private void deal() {

        ParseObject newDeal = new ParseObject("Deals");
        newDeal.put("uses", mUses);
        newDeal.put("unlimitedUses", isUnlimited);
        newDeal.put("description", mDescription);
        newDeal.put("free", isFree);
        newDeal.put("title", title);
        newDeal.put("oldPrice", mOldPrice);
        newDeal.put("newPrice", mNewPrice);
        newDeal.put("location", location);
        newDeal.put("username", mUsername);
        newDeal.put("companyName", companyName);
        newDeal.saveInBackground(new SaveCallback() {
            @Override
            public void done(ParseException e) {
                Context context = getApplicationContext();
                CharSequence text = "Deal Saved";
                int duration = Toast.LENGTH_SHORT;
                Toast toast = Toast.makeText(context, text, duration);
                toast.show();
            }
        });
    }

    public void showTimePickerDialog(View v) {
        DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getSupportFragmentManager(), "timePicker");
    }

    public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getSupportFragmentManager(), "datePicker");
    }

}

这些是我的碎片:

日期:

package com.shotsevolved.app;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;

import java.util.Calendar;


public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
    }
}

时间:

package com.shotsevolved.app;

import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.format.DateFormat;
import android.widget.TimePicker;

import java.util.Calendar;


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) {
        // Do something with the time chosen by the user
    }
}

最后我的XML:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#1e1c1c"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="@dimen/height"
        android:layout_alignParentTop="true"
        android:background="@color/purple"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <ImageButton
                android:id="@+id/btn_backFromSettings"
                android:layout_width="@dimen/width"
                android:layout_height="fill_parent"
                android:background="@drawable/ui_button_purple"
                android:contentDescription="@string/desc"
                android:src="@drawable/ico_left" />

            <LinearLayout
                android:layout_width="@dimen/divider_size"
                android:layout_height="fill_parent"
                android:background="@color/dark_purple" >
            </LinearLayout>

            <TextView
                android:id="@+id/mainLogin"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:tag="bold"
                android:text="@string/dealCreator"
                android:textColor="@color/white"
                android:textSize="@dimen/tex_size_xxlarge" />

            <LinearLayout
                android:layout_width="@dimen/divider_size"
                android:layout_height="fill_parent"
                android:background="@color/dark_purple" >
            </LinearLayout>

        </LinearLayout>
    </LinearLayout>



    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:id="@+id/mainLinear">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="@dimen/dim_20"
                android:id="@+id/linView">

                <ProgressBar
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/progressIcon"
                    android:layout_gravity="center_horizontal" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/titleOfDeal"
                    style="@style/EditText_Purple"
                    android:hint="Title of Deal"
                    android:layout_gravity="center_horizontal" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:id="@+id/dealDescription"
                    android:gravity="top"
                    android:layout_marginTop="@dimen/dim_10"
                    style="@style/EditText_Purple"
                    android:hint="Describe company and deal"
                    android:layout_gravity="center_horizontal" />

                <CheckBox
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Free"
                    android:layout_marginTop="@dimen/dim_10"
                    style="@style/CheckBox_Purple"
                    android:textColor="@color/offwhite"
                    android:id="@+id/freeBox" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/oldPrice"
                    android:layout_marginTop="@dimen/dim_10"
                    style="@style/EditText_Purple"
                    android:hint="Old cost of product"
                    android:inputType="numberDecimal"
                    android:layout_gravity="center_horizontal" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/newPrice"
                    android:layout_marginTop="@dimen/dim_10"
                    android:inputType="numberDecimal"
                    style="@style/EditText_Purple"
                    android:hint="New cost of product"
                    android:layout_gravity="center_horizontal" />
                </LinearLayout>



            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:id="@+id/linView1"
                android:paddingRight="@dimen/dim_20"
                android:paddingLeft="@dimen/dim_20">

                <CheckBox
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Unlimited uses"
                    style="@style/CheckBox_Purple"
                    android:textColor="@color/offwhite"
                    android:id="@+id/unlimitedBox" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/uses"
                    android:layout_marginTop="@dimen/dim_10"
                    style="@style/EditText_Purple"
                    android:hint="Number of uses per customer"
                    android:inputType="number"
                    android:layout_gravity="center_horizontal" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:id="@+id/linView2"
                android:gravity="center_horizontal"
                android:layout_marginTop="@dimen/dim_10"
                android:paddingRight="@dimen/dim_20"
                android:paddingLeft="@dimen/dim_20">

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/startDate"
                    android:layout_marginTop="@dimen/dim_10"
                    style="@style/EditText_Purple"
                    android:hint="Start Date"
                    android:layout_marginRight="@dimen/dim_10"
                    android:layout_gravity="center_horizontal" />

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/startTime"
                    android:layout_marginTop="@dimen/dim_10"
                    style="@style/EditText_Purple"
                    android:hint="Start Time"
                    android:layout_gravity="center_horizontal" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:layout_marginTop="@dimen/dim_10"
                    android:gravity="center_horizontal">

                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Set expiry date"
                        android:layout_marginRight="@dimen/dim_10"
                        android:padding="@dimen/dim_10"
                        style="@style/Button_Purple"
                        android:id="@+id/dateButtonEnd"
                        android:layout_gravity="center_horizontal" />

                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Set expiry time"
                        android:padding="@dimen/dim_10"
                        style="@style/Button_Purple"
                        android:id="@+id/timeButtonEnd"
                        android:layout_gravity="center_horizontal" />
                </LinearLayout>


            </LinearLayout>

                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Create"
                    android:padding="@dimen/dim_10"
                    android:layout_marginTop="@dimen/dim_10"
                    android:layout_marginLeft="@dimen/dim_20"
                    android:layout_marginRight="@dimen/dim_20"
                    style="@style/Button_Purple"
                    android:id="@+id/createButton"
                    android:layout_gravity="center_horizontal" />

            </LinearLayout>
    </ScrollView>

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

嗯,你的代码看起来不错。您可以尝试将android:focusable="false"添加到按钮中吗?我很好奇,如果问题是你只是在第一次点击时请求焦点而第二次实际启动点击。

另外,如果这没有帮助,你可以在点击监听器和public void showTimePickerDialog(View v) {方法中添加一些日志......看看它是否触发了第一次点击。

答案 1 :(得分:0)

尝试在按钮上添加延迟点击它将避免多次点击

date.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            date.setEnabled(false);
            showDatePickerDialog(main);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    date.setEnabled(true);
                }
            }, 100);
        }
    });