2013-04-05 136 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); 

    } 
};