所以,基本上,我有一个名为boutonPortail
的ImageButton,另一个叫logo
。初始化boutonPortail
工作正常,但是当我为其监听器分配boutonPortail.setOnClickListener(boutonPortailListener);
应用程序崩溃时,我根本不知道为什么。这对听众来说不是问题,因为当我将它分配给logo
时,它的工作正常。我怀疑这是XML的问题,因为我复制/粘贴了logo
的代码。
我的应用提示输入密码,如果密码正确,则切换到另一个包含logo
和boutonPortail
的视图。请注意,密码提示视图也包含logo
。
问题boutonPortail
不在主视图上吗?我尝试在切换视图后分配监听器,但它仍然崩溃。
另外,由于某些原因,我无法使用boutonPortail.setImageResource(R.drawable.boutonfermer);
设置更改按钮的图像。 (当它在主视图中时不会发生这种情况)
onCreate方法:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
logo = (ImageButton)findViewById(R.id.logo);
boutonPortail = (ImageButton)findViewById(R.id.boutonPortail);
codeEntered = (EditText)findViewById(R.id.codeEntered);
codeSurNotice = (TextView)findViewById(R.id.codeSurNotice);
//attribute all listeners
logo.setOnClickListener(boutonPortailListener);
codeEntered.addTextChangedListener(textWatcher);
codeEntered.setOnKeyListener(codeEnteredListener);
更改视图的方法:
void codeCorrect() {
setContentView(R.layout.activity_readytopress);
boutonPortail.setOnClickListener(boutonPortailListener); //this line crashes the app, even if put in the onCreate
}
监听器:
private OnClickListener boutonPortailListener = new OnClickListener() {
@Override
public void onClick(View v) {
boutonState++;
if(boutonState>=4)
boutonState=0;
boutonPortail.setImageResource(R.drawable.boutonfermer);
}
};
XML:
<ImageButton
android:id="@+id/boutonPortail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="40dip"
android:src="@drawable/boutonouvrir"
android:background="#00000000"
style="#00000000"
android:layout_gravity="center"
/>
如果你想测试它,这是我的完整代码(注意你必须手动调用codeCorrect()
方法,因为你无法访问我使用的蓝牙设备):
MainActivity.java
http://pastebin.com/ZXDahPZ6
activity_main.xml
http://pastebin.com/f14cVBKj
activity_readytopress.xml
http://pastebin.com/0iZm91eq
boutonouvrir.png
http://puu.sh/mLGeU.png
ouvertureencours.png
http://puu.sh/mLGfI.png
boutonfermer.png
http://puu.sh/mLGe5.png
fermetureencours.png
http://puu.sh/mLGgW.png
谢谢:)
答案 0 :(得分:2)
boutonPortail
activity_main.xml
的按钮
它因空指针异常而崩溃。 您无法将侦听器添加到空对象。
以下是您的相关代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// On récupère toutes les vues dont on a besoin
logo = (ImageButton)findViewById(R.id.logo);
boutonPortail = (ImageButton)findViewById(R.id.boutonPortail);
因此,您拨打setContentView(R.layout.activity_main)
,然后致电findViewById(R.id.boutonPortail)
findContentView()
将返回null,因为acitivty_main.xml
没有该值的视图ID。所以现在boutonPortail
为空。
然后你调用boutonPortail.setOnClickListener(boutonPortailListener)
,因为boutonPortail
为空