2013-04-05 145 views
0

我想我需要一个监听器,但不能设置它。 在下面的代码中,时间对话框和日期对话框都起作用。随后出现小对话框,我选择一个日期/时间,然后选择我有我的日期。但我无法使文本输入工作。 我已经尝试了几次这样的代码从一个示例程序迭代: bnBodyEntered = true; bodyDialog = new TextInputDialog(this); bodyDialog.setText(“body”); 这段代码显示了带有字母滚轮的文本对话框,但程序已经过去了,当我输入几个字母并且没有选择任何事情时。因为我没有成立听众。所以我补充说(如注) bodyDialog.setOnDismissListener(textSetListener); 使用几个“setOn ---- Listener”值,它或者仍然运行过去,或者我得到各种编译错误。如何设置侦听器?

这是为我的WIMMOne手表,所以版本7,没有虚拟键盘。它需要是一个对话框。

(注:我删除了发布前的注释代码采空区 - 可能更多的东西,所以如果它没有因为 - 对不起。)

感谢,克拉克

/****************************** 
* Wimm imports 
******************************/ 
import com.wimm.framework.app.Dialog; 
import com.wimm.framework.app.DatePickerDialog; 
import com.wimm.framework.app.DatePickerDialog.OnDateSelectedListener; 
import com.wimm.framework.app.LauncherActivity; 
import com.wimm.framework.app.TextInputDialog; 
import com.wimm.framework.app.TimePickerDialog; 
import com.wimm.framework.app.TimePickerDialog.OnTimeSelectedListener; 



@ Override 
public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    Log.d("RemindEA","01S onCrt"); 
    setContentView(R.layout.reminder_edit_activity); 

      . . . 
      . . . 


    mBodyText = (EditText)findViewById(R.id.body); 
    mTimeButton = (Button)findViewById(R.id.reminder_time); 
    mDateButton = (Button)findViewById(R.id.reminder_date); 

    mConfirmButton = (Button)findViewById(R.id.confirm); 
    Log.d("RemindEA","10S onCrtV df"); 


    //------------- TEXT INPUT 
    mBodyText.setOnClickListener(new View.OnClickListener() 
       { 
     public void onClick(View v) 
     { 
     Log.d("RemindEA","21> onClkV:Body"); 
        showDialog(BODY_DIALOG_ID); 
       Log.d("RemindEA","22< onClkV:Body:" + strBody); 

     mBodyText.setText(bodyDialog.getText()); 
      return; 
     } 
       }); 

    //-------------------------- TIME INPUT 
    mTimeButton.setOnClickListener(new View.OnClickListener()  
      { 
     @Override 
     public void onClick(View v) 
      { 
     Log.d("RemindEA","25> onClkV:Time"); 
     showDialog(TIME_DIALOG_ID); 
     Log.d("RemindEA","26< onClkV:Time"); 
      } 
       }); 


    //-------------------------- DATE INPUT 
    mDateButton.setOnClickListener(new View.OnClickListener() 
     { 
     @Override 
     public void onClick(View v) 
      { 
     Log.d("RemindEA","30> onClkV:Time"); 
     showDialog(DATE_DIALOG_ID); 
     Log.d("RemindEA","31< onClkV:Time"); 
      } 
      } ); 

    protected Dialog onCreateDialog(int id) 
    { 
    Log.d("RemindEA","70S Dialog:" + id); 
    switch (id) 
    { 
     // if we want a time dialog-------------- 
     case TIME_DIALOG_ID: 
     Log.d("RemindEA","71S TIME_DIALOG_ID"); 
    timeDialog = new TimePickerDialog(this); 
    timeDialog.setTimeSelectedListener(timeSetListener); 
      timeDialog.setTime(mCalendar.get(Calendar.HOUR_OF_DAY), 
           mCalendar.get(Calendar.MINUTE)); 
    Log.d("RemindEA","73S TIME_D:" + timeDialog); 
    return timeDialog; 

    // if we want a date dialog --------------- 
    case DATE_DIALOG_ID: 
     Log.d("RemindEA","75S DATE_DIALOG_ID-26"); 
     mCalendar = Calendar.getInstance(); 
     Log.d("RemindEA","76S DATE_DIALOG_ID-27"); 
     dateDialog = new DatePickerDialog(this); 
     dateDialog.setDateSelectedListener(dateSetListener); 
     dateDialog.setDate(mCalendar.get(Calendar.DAY_OF_MONTH), 
       mCalendar.get(Calendar.MONTH )); 
     Log.d("RemindEA","77S DATE_D:" + dateDialog); 
     return dateDialog; 

    // if we want text input dialog --------------------- 
    case BODY_DIALOG_ID: 
     Log.d("RemindEA","80S BODY_DIALOG_ID"); 
     bnBodyEntered = true; 
     Log.d("RemindEA","81S TITLE"); 
     bodyDialog = new TextInputDialog(this); 
      //---> ADDED LINE BELOW TO CREATE A LISTENER: GET ERROR <----- 
      // ERROR BELOW: setOnDismissListener cannot be resolved to a type 
       bodyDialog.setOnDismissListener(textSetListener); 
      //------------------------------------------ 
       //ALSO //.setOnKeyListener(onKeyListener) - others  
      Log.d("RemindEA","82S New"); 
     bodyDialog.setText("body"); 
     Log.d("RemindEA","83X:" + bodyDialog); 
     return bodyDialog; 
     } 
     return null; 
    } 

    private OnTimeSelectedListener timeSetListener = new OnTimeSelectedListener() 
     { 
     public void onTimeSelected(int arg0, int arg1) 
     { 
    Log.d("RemindEA","90S onTimeSelected"); 
    intHH = arg0; 
    intMN = arg1; 
    Log.d("RemindEA","91S schedule:" + intHH + ":" + intMN); 
    //updateDisplay(); 
     } 
     }; 


    private OnDateSelectedListener dateSetListener = new OnDateSelectedListener() 
     { 
     public void onDateSelected(int arg0, int arg1) 
      { 
    Log.d("RemindEA","92S onTimeSelected"); 
    intDD = arg0; 
    intMM = arg1; 
    Log.d("RemindEA","93S schedule:" + intDD + ":" + intMM); 
    //updateDisplay(); 
     } 
     }; 

//------------------------------------ 
// -----> ERROR: setOnDismissListener cannot be resolved to a type 
    private setOnDismissListener textSetListener = new setOnDismissListener 
//------------------------------------ 
     { 
     private void textSetListener() // bodySetListener() 
      { 
     Log.d("RemindEA","100S BodyLisner"); //<- does not get here on <done> 
     return; 
      } 
     }; 

回答

1

多小时后猜测和错误,这工作。

我不认为“Return bodyDialog”会做任何事情;我最终直接从侦听器更新EditText字段。 “arg0”具有对话的长名称 - 没有用处。但你有它防止编译错误。

对于没有虚拟键盘且需要使用文本输入对话框的WIMMOne,这可能是独一无二的。

protected Dialog onCreateDialog(int id) 
    { 
switch (id) 
     . . . . 
     case BODY_DIALOG_ID: 
      bodyDialog = new TextInputDialog(this); 
      bodyDialog.setOnDismissListener(textSetListener); 
      return bodyDialog; 


private OnDismissListener textSetListener = new OnDismissListener() 
{ 
@Override 
public void onDismiss(DialogInterface arg0) 
    { 
    Log.d("RemindEA","101S BodyLisner" + arg0); 
    String strxx = bodyDialog.getText(); 
    mBodyText.setText(strxx); 

    } 
};