public void pickTimeHandler(View target) {
Toast.makeText(Alarms1.this, "in PickTimehandler", Toast.LENGTH_LONG).show();
showDialog(0);
在那裏你看到Alarm1.this總是在我所有的代碼中的錯誤,說 類型Alarms1沒有外圍實例是在範圍訪問鬧鐘應用程序錯誤
public void pickTimeHandler(View target) {
Toast.makeText(Alarms1.this, "in PickTimehandler", Toast.LENGTH_LONG).show();
showDialog(0);
在那裏你看到Alarm1.this總是在我所有的代碼中的錯誤,說 類型Alarms1沒有外圍實例是在範圍訪問鬧鐘應用程序錯誤
你會寫,如果Alarms1.this那就是封閉類的名字
這是什麼類的名字?使用該名稱。
例子:
public class Alarms1 {
public void pickTimeHandler(View target) {
//code below would work, you could also just write "this" instead of "Alarms1.this"
Toast.makeText(Alarms1.this, "in PickTimehandler", Toast.LENGTH_LONG).show();
showDialog(0);
}
}
你只需要使用類的名稱來限定這個值,如果它是從一個內部類製成。
這裏是正在使用的,當你需要的資格是什麼「這個」參數,您的例子:
public class Alarms1 {
public void onCreate(Bundle state) {
Button button = (Button) findViewById(R.id.set_alarm);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(Alarms1.this, "Button clicked", Toast.LENGTH_LONG).show();
}
});
}
}
不同的是,在第二個例子中,上面的代碼,你正在創建一個匿名內部類時你把
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
,並從該代碼中,如果你寫this
Java編譯器/運行時會想你指的內部類的實例(而不是在Alarms1)。
--- UPDATE ---
給你送我的代碼,我想出了這一點:
包com。示例;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;
public class AlarmActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void pickTimeHandler(View target) {
Toast.makeText(this, "in PickTimehandler",
Toast.LENGTH_LONG).show();
showDialog(0);
}
@Override
protected Dialog onCreateDialog(int id) {
Toast.makeText(this,
"- onCreateDialog(ID_TIMEPICKER) -",
Toast.LENGTH_LONG).show();
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
OnTimeSetListener theTimeSetListener = null;
return new TimePickerDialog(this,
theTimeSetListener,
hour, minute, false);
}
private TimePickerDialog.OnTimeSetListener theTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hour, int minute) {
String time = "User picked Hour: " + String.valueOf(hour) + "\n"
+ "Minute: " + String.valueOf(minute);
Toast.makeText(AlarmActivity.this, time, Toast.LENGTH_LONG).show();
int theHour = hour;
int theMinute = minute;
Intent alarmIntent = new Intent();
alarmIntent.putExtra("nel.example.alarms1", "My message");
Object pendingAlarmIntent = PendingIntent.getService(AlarmActivity.this, 0,
alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar AlarmCal = Calendar.getInstance();
AlarmCal.setTimeInMillis(System.currentTimeMillis());
AlarmCal.set(Calendar.HOUR_OF_DAY, theHour); // set user selection
AlarmCal.set(Calendar.MINUTE, theMinute); // set user selection
AlarmCal.set(Calendar.SECOND, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
AlarmCal.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES,
(PendingIntent) pendingAlarmIntent);
}
};
}
我所做的改變是:
PendingIntent.getService需要一個上下文。這完全是我在原始解決方案中描述的問題。 Activity是Context的子類,這意味着您可以在第一個參數中將活動傳遞給PendingIntent.getService。然而,當你創建了一個內部類:
私人TimePickerDialog.OnTimeSetListener theTimeSetListener =新TimePickerDialog.OnTimeSetListener(){
內不再是一個活動的代碼,這是一個TimePickerDialog.OnTimeSetListener。您需要傳遞myMenu.this作爲第一個參數(或者在我的情況中,因爲我將您的類重命名爲AlarmActivity,您將傳遞AlarmActivity.this)。在內部類中創建的Toasts也是一樣的。
我強烈建議你在繼續android開發之前停止你正在做的事情並去學java。閱讀一本書,按照在線教程等,但如果你只是不瞭解Java而深入Android,你將會遇到一系列問題。
我不明白你的意思? – user1223679 2012-02-28 15:37:01
哦,所以我把這個放在我的alarams1 java中? – user1223679 2012-02-28 15:39:03
我不知道你應該把它放在哪裏,這取決於你決定(我沒有建立這個程序)。更有可能你應該只是改變Alarms1.this到這 – 2012-02-28 15:45:25
請向我們展示您的全班。否則我們猜測。 – 2012-02-28 15:55:19
好吧,如果你不能發佈完整的代碼(它必須是數百或數千行)..你可以在這裏發佈課程的結構嗎?例如顯示類聲明(公共類YourClass),然後顯示任何相關的內部類定義。 – 2012-02-28 16:04:41