启动应用程序后启动Dialog! (自己的对话)但是当我向对话框添加一个ImageButton时,应用程序确实崩溃但我想使用我自己的对话框xml文件和我自己设计的图像按钮
这是我的代码:
public class MenueActivity extends AppCompatActivity {
SharedPreferences mPrefs;
ImageButton btnverstanden;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menue);
btnverstanden = (ImageButton)findViewById(R.id.verstanden);
Context mContext = this.getApplicationContext();
mPrefs = mContext.getSharedPreferences("myAppPrefs", 0);
if(getFirstRun()) {
final Dialog dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.activity_dialog_tutorial);
btnverstanden.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
setRan();
dialog.show();
}
}
public boolean getFirstRun() {
return mPrefs.getBoolean("firstRun", true);
}
public void setRan() {
SharedPreferences.Editor edit = mPrefs.edit();
edit.putBoolean("firstRun", false);
edit.apply();
}
}
当某人帮助我时,我不明白这一点,我是初学者
答案 0 :(得分:0)
你说你得到NullPointException:ImageButton.setOnClickListener
,这意味着btnverstanden
为空。
ImageButton btnverstanden
位于您的对话框布局中,但是您在mian布局R.layout.activity_menue
中初始化,所以我想这就是您获得异常的原因。
也许你应该这样写:
final Dialog dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.activity_dialog_tutorial);
View view = getLayoutInflate().inflate(R.layout.activity_dialog_tutorial,null);
btnverstanden = (ImageButton)view.findViewById(R.id.verstanden);
答案 1 :(得分:0)
如果您的ImageButton btnverstanden;
位于R.layout.activity_menue
,则无法将此ImageButton
添加到Dialog,如果此按钮已开启R.layout.activity_dialog_tutorial
,请在对话框中初始化此内容。
删除它:
btnverstanden = (ImageButton)findViewById(R.id.verstanden);
有了这个:
final Dialog dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
dialog.setContentView(R.layout.activity_dialog_tutorial);
ImageButton btnverstanden = (ImageButton) dialog.findViewById(R.id.verstanden); //<---init here
btnverstanden.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});