2013-10-10 48 views
2

这里是我的代码:在onClick()方法中声明的datepickobj似乎无法识别在DatePickerDialog.OnDateSetListener中创建的对象。 我得到'datepickobj无法解析为变量'的错误!任何帮助非常感谢。DateSetListener对象无法解析

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     userdate =(EditText) findViewById(R.id.user_datespent); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
     Date da = new Date(); 
     userdate.setText(sdf.format(da)); 
     final Calendar cal = Calendar.getInstance();  



     Button changeDate = (Button) findViewById(R.id.button_for_cal); 
     changeDate.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       DatePickerDialog(this, datepickobj, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
         cal.get(Calendar.DAY_OF_MONTH)).show(); 
       userdate.setText(""); 
      } 
     }); 

     DatePickerDialog.OnDateSetListener datepickobj = new OnDateSetListener() { 

      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, 
        int dayOfMonth) { 
       // TODO Auto-generated method stub 
       cday = dayOfMonth; 
       cmonth = monthOfYear + 1; 
       cyear = year; 

       userdate.setText("Choosen date is :" + cday + "/" + cmonth + "/" + cyear);  
      } 
     }; 

回答

1

移动datepickobj所以它是线

changeDate.setOnClickListener(new OnClickListener() { 

之前并宣布它作为final

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    userdate =(EditText) findViewById(R.id.user_datespent); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
    Date da = new Date(); 
    userdate.setText(sdf.format(da)); 
    final Calendar cal = Calendar.getInstance();  

    final DatePickerDialog.OnDateSetListener datepickobj = new OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, 
          int dayOfMonth) { 
     // TODO Auto-generated method stub 
     cday = dayOfMonth; 
     cmonth = monthOfYear + 1; 
     cyear = year; 

     userdate.setText("Choosen date is :" + cday + "/" + cmonth + "/" + cyear);  
    } 
    }; 

    Button changeDate = (Button) findViewById(R.id.button_for_cal); 
    changeDate.setOnClickListener(new OnClickListener() {   
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     DatePickerDialog(this, datepickobj, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
         cal.get(Calendar.DAY_OF_MONTH)).show(); 
     userdate.setText(""); 
    } 
    }); 
} 

方法作用域在Java中的变量按照声明的条款的线性模式,你不能在方法的末尾声明一个变量,并尝试之前,使用它的任何地方。

使用final修饰符是因为您在匿名内部类中使用datepickobj。如果您将datepickobj作为实例变量(也就是说,在类的根目录以外的任何方法之外),则不需要final修饰符即可获取代码进行编译。