2011-12-05 44 views
3

我使用多个textview与onclick监听器,指示我到TimePicker对话框。TimePicker对话框

但是我似乎无法知道如何阅读教程后写的代码,

textview1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      showDialog(TIME_DIALOG_ID); 
     } 
    }); 

    textview2.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      showDialog(TIME_DIALOG_ID); 
     } 
    }); 

要显示该对话框:

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case TIME_DIALOG_ID: 
     return new TimePickerDialog(this, 
       mTimeSetListener, mHour, mMinute, true); 
    } 
    return null; 
} 

最后,

private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
     new TimePickerDialog.OnTimeSetListener() { 
      @Override 
      public void onTimeSet(android.widget.TimePicker view, 
        int hourOfDay, int minute) { 
       mHour = hourOfDay; 
       mMinute = minute; 
      } 
     }; 

现在,对于在TimePickerDialog.OnTimeSetListener回调之后调用timepicker的textview的.setText,我应该如何编写代码?

答案很简单,但我缺乏面向对象的知识并仍在学习。 谢谢...

回答

3

您需要使用全局变量。比方说,String fromWhere="";

现在,

textview1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       fromWhere="textview1"; 
       showDialog(TIME_DIALOG_ID); 
      } 
    }); 

    textview2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       fromWhere="textview2"; 
       showDialog(TIME_DIALOG_ID); 
      } 
    }); 
    ... 
    private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
      new TimePickerDialog.OnTimeSetListener() { 
       @Override 
       public void onTimeSet(android.widget.TimePicker view, 
         int hourOfDay, int minute) { 

        if(fromWhere.equals(textview1)) 
          // set hour and minute to according variable and textview 
        else if(fromWhere.equals(textview2)) 
          // set hour and minute to according variable and textview 
        .. //so on for others 
        //mHour = hourOfDay; 
        //mMinute = minute; 
        fromWhere=""; 
       } 
    }; 
+0

如何表现出什么,如果我在适配器,我的意思是从ArrayAdapter 类继承dialoge,我不能说showdialoge(0); – AMH

+0

@AHM:你为什么需要从Adapter类打开对话框?您可以通过获取列表项的相关ID(如果您使用ArrayAdapter来呈现列表),在活动本身中执行此操作。 – Hiral

0

使用EditText,我们可以得到时间pikker长按编辑文本。

EditText timeDisplay=(EditText)findViewById(R.id.timeDisplay); 

timeDisplay.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 

     showDialog(TIME_DIALOG_ID);  
    }  
}); 
1

创建一个成员变量(比如int whichViewClicked = 0)在你的类来跟踪的TextView的点击带来行动的时间选择器。

现在,如果您单击textview1设置whichViewClickClicked = 1,如果textview2被单击设置whichViewClickClicked = 2等等。在onTimeSet()方法中,检查哪个ViewClickClick的值并相应地设置textview文本

相关问题