0

ページに 2 つのボタンがあります。ボタンを押すと、日付ピッカー ダイアログが開きます。日付ピッカーの [完了] をクリックすると、ボタンのテキストをユーザーが選択した日付に設定したいと考えています。

日付ピッカーの単一の関数を使用してこれを行いたいです。

私のコード:

final Button fromdate = (Button) dialog.findViewById(R.id.ButtonTripConfigureFrom);     
    fromdate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);     
                fromdate.setText(date);
            }
     });

final Button tilldate = (Button) dialog.findViewById(R.id.ButtonTripConfigureTo);       
    tilldate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);  
                tilldate.setText(date);
            }
     });

protected Dialog onCreateDialog(int id) 
    {   
        final Calendar c = Calendar.getInstance();
        int myYear = c.get(Calendar.YEAR);
        int myMonth = c.get(Calendar.MONTH);
        int myDay = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(this,myDateSetListener,myYear, myMonth, myDay);
}

private DatePickerDialog.OnDateSetListener myDateSetListener = new DatePickerDialog.OnDateSetListener()
{
    public void onDateSet(DatePicker view, int year, int month, int day) 
    {           
       date = day + "/" + (month+1) +"/"+ year;                    
    } 
};

ただし、これを行うと、ユーザーが選択した値が表示されません。ボタンをもう一度押したときにのみ表示されます(ユーザーが日付ピッカーのDONEを押す前に、ボタンのsettextが実行されています)

私がチェックしたすべてのソリューションは、日付セット関数内の変更を示しています。しかし、2 つの異なるボタンがあるため、dateset 関数内でボタンの settext を使用することはできません。

日付セット関数によって値が返される方法、またはパラメーターを日付セットに渡してから日付セット内で if を使用する方法はありますか。

4

2 に答える 2

1

クリックしたときにのみ fromdate ボタンを更新しています。もう一度クリックすると更新されるのはそのためです... 日付が設定されているときに更新するには、myDateSetListener.onDateSet のテキストを変更する必要がありますが、ボタンが 2 つあるため、buttons.onClick に値を設定します。どのボタンがクリックされたか覚えておいてください:



    mFromdate = (Button) dialog.findViewById(R.id.ButtonTripConfigureFrom);     
    mFromdate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);
                mButtonClicked = 0;
            }
    });

    mTilldate = (Button) dialog.findViewById(R.id.ButtonTripConfigureTo);       
    mTilldate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {                           
                showDialog(0);
                mButtonClicked = 1;
            }
    });

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

        public void onDateSet(DatePicker view, int year, int month, int day) 
        {         
            if(mButtonClicked == 0)
                mFromdate.setText(day + "/" + (month+1) +"/"+ year);
            else if(mButtonClicked == 1)  
                mTillDate.setText(day + "/" + (month+1) +"/"+ year);           
        } 

    };

また、クラスの mFromdate、mTilldate、および mButtonclicked フィールドを作成します;)

于 2013-04-28T11:03:01.037 に答える
0

今のところ私が考えることができるのは: -

static int buttonClicked;    
final Button fromdate = (Button) dialog.findViewById(R.id.ButtonTripConfigureFrom);     
        fromdate.setOnClickListener(new OnClickListener()
        {                   
            public void onClick(View v)
                {      
                    buttonClicked = fromDate.getId();
                    showDialog(0);
                }
         });

final Button tilldate = (Button) dialog.findViewById(R.id.ButtonTripConfigureTo);       
    tilldate.setOnClickListener(new OnClickListener()
    {                   
        public void onClick(View v)
            {        
                buttonClicked = tillDate.getId();                   
                showDialog(0);
            }
     });

protected Dialog onCreateDialog(int id) 
    {   
        final Calendar c = Calendar.getInstance();
        int myYear = c.get(Calendar.YEAR);
        int myMonth = c.get(Calendar.MONTH);
        int myDay = c.get(Calendar.DAY_OF_MONTH);

    return new DatePickerDialog(this,myDateSetListener,myYear, myMonth, myDay);
}

private DatePickerDialog.OnDateSetListener myDateSetListener = new DatePickerDialog.OnDateSetListener()
{
    public void onDateSet(DatePicker view, int year, int month, int day) 
    {           
       date = day + "/" + (month+1) +"/"+ year; 
       Button btn = (Button) dialog. findViewById(buttonClicked);  //assuming the dialog in which the button is a class level variable.. 
       btn.setText(date);                   
    } 
};

これは間違いなくそれを行う必要があります。:)

編集 - 私があなたのコードに対して行ったことは、押されたボタンのIDを保存したことです。次に、この保存された ID から onDateSet() メソッドでボタンを取得し、選択した日付をそのボタンのテキストとして設定します。

于 2013-04-28T11:04:20.180 に答える