Android问题无解决方案随手记

Android没怎么看直接上手撸代码,问题自然少不了;故此随手记些遇到的问题(可能是些极脑残的错误)。

当然了,本文也将继续发扬我学习Android时散漫的态度,各位看官看到的文字想必随意至极,见谅啦。

View.OnClickListener接口与Button的setOnClickListener不能同时使用

OK,脑残问题一。
同时实现OnClickListener接口的onClick()方法与Button的setOnClickListener方法,即使任一Button的点击事件只用其中一种方法写、未发生多次实现的问题,程序点击事件将无法如您所愿地进行。事实上,这样做点击按钮将会什么事都不发生。

关于Context的问题(android.app.Application cannot be cast to android.app.Activity)

这个是我一直没去弄明白的问题,既然今天报错了,那就记一下。

问题是:Context到底应该传this还是ActivityName.this,今天IDE还告诉了我还有getApplicationContext()这个方法来得到Context,这让我更加混乱了。
下面是报错的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
delete_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimePickerView pvTime = new TimePickerBuilder(getApplicationContext(), new OnTimeSelectListener() { //注意,这里我使用了getApplicationContext(),IDE并未报错,但是运行时一旦触发点击事件,程序就会崩溃,报标题上写的那个错误
@Override
public void onTimeSelect(Date date, View v) {
Button tmp= (Button) findViewById(R.id.delete_data);
tmp.setText(date.getHours()+":"+date.getMinutes());
}
}).setType(new boolean[]{false,false,false,true,true,false}).build();
pvTime.show();
}
});

根据参考资料[1],You are passing the Application Context not the Activity Context with
getApplicationContext();
.
嗯,好吧,但是为什么下面的代码能够成功运行呢,这是我未搞懂的问题。

1
2
3
4
5
6
7
8
9
10
11
12
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Connector.getDatabase();
Toast.makeText(getApplicationContext(),"Create Successfully",Toast.LENGTH_SHORT).show(); //同样使用了getApplicationContext(),但这里功能能够正常实现
}
});

emmm……先搁置了,以后想起来再想办法搞懂。

参考资料:

  1. android.app.Application cannot be cast to android.app.Activity