我的工作代码是
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
Toast tst;
if (item.getItemId() == R.id.menuVada) {
tst = Toast.makeText(Main.this, " Vada ", 2000);
} else {
tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
+ " Menu ID: " + item.getItemId(), 2000);
}
tst.setGravity(Gravity.CENTER, 0, 0);
tst.show();
return true;
}
但此代码不起作用
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
Toast tst;
if (item.getItemId() == R.id.menuVada) {
//tst = Toast.makeText(Main.this, " Vada ", 2000);
} else {
tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
+ " Menu ID: " + item.getItemId(), 2000);
}
tst.setGravity(Gravity.CENTER, 0, 0);
tst.show();
return true;
}
为什么不使用我的代码?
请帮忙。
最好的问候
答案 0 :(得分:6)
如果(item.getItemId() == R.id.menuVada)
怎么办?
只需将tst
初始化为null
即可。然后检查tst!=null
是否显示吐司
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
Toast tst = null;
if (item.getItemId() == R.id.menuVada) {
//tst = Toast.makeText(Main.this, " Vada ", 2000);
} else {
tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
+ " Menu ID: " + item.getItemId(), 2000);
}
if(tst!=null){
tst.setGravity(Gravity.CENTER, 0, 0);
tst.show();
}
return true;
}
答案 1 :(得分:1)
您的变量Toast tst;
应该在两者中初始化
if
和else
条件。
因为如果您发现if()
条件true
,则永远不会调用else
部分。
并且应用程序流程将进入下一个和
将导致NullPointerException
答案 2 :(得分:1)
是的,在if分支中,tst未初始化。但是如果你只在一个分支中显示Toast,我也会将声明,重力和显示行放在该分支中。
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
if (item.getItemId() == R.id.menuVada) {
} else {
Toast tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
+ " Menu ID: " + item.getItemId(), 2000);
tst.setGravity(Gravity.CENTER, 0, 0);
tst.show();
}
return true;
}
否则采取Serif的方式。
答案 3 :(得分:0)
您必须在使用之前初始化变量。试试这个:
Toast tst = null;
但是如果代码不采用else
分支,将获取空引用异常。所以,在某种程度上,你仍然可以说代码不起作用......它只是编译。
答案 4 :(得分:0)
因为如果您的if()
测试为真,它将进入空分支,其中tst
的分配已被注释掉。因此,当您到达tst
时,tst.setGravity()
未初始化。
答案 5 :(得分:0)
我认为你应该让它像静态一样
Static tst;
或者让它将tst存储在另一个变量中,然后访问你的类Toast,如
Toast t = new Toast();
t.tst = // your variable
希望它能运作
答案 6 :(得分:-1)
您可以尝试:
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
if (item.getItemId() == R.id.menuVada) {
Toast.makeText(Main.this, " Vada ", 2000);
} else {
Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
+ " Menu ID: " + item.getItemId(), 2000);
}
return true;
}
根据评论编辑。