2

ここに私のコードがあります: onClick() メソッド内で宣言された datepickobj は、DatePickerDialog.OnDateSetListener で作成されたオブジェクトを認識していないようです。「datepickobj を変数に解決できません」というエラーが表示されます。どんな助けでも大歓迎です。

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);      
            }
        };
4

1 に答える 1

2

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コードをコンパイルするために修飾子は必要ありません。

于 2013-10-10T03:29:41.263 に答える