在main.xml中更改了顺序,现在我得到了ClassCastException

时间:2012-01-06 13:59:04

标签: android classcastexception

使用eclipse和Android SDK,我使用Button和ProgressBar管理了一个简单的测试应用程序。所有运行都很好,除了我不希望ProgressBar移动Button,当ProgressBar可见时,所以只是为了测试我更改了它们在res / layout / main.xml文件中定义的顺序(使用了LinearLayout中)。编译并运行我然后在下面的“final ProgressBar ...”行中获得ClassCastException。

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /* 01-06 14:37:39.590: E/AndroidRuntime(863): java.lang.RuntimeException: 
       java.lang.ClassCastException: android.widget.Button cannot be cast to
       android.widget.ProgressBar */
    final ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressBar1); /* here */
    progressbar.setVisibility(ProgressBar.GONE);

    final Button exebutton = (Button)findViewById(R.id.button1);
    exebutton.setOnClickListener(new View.OnClickListener()
    // etc...

现在,我明白了ClasCastException的含义和含义,我只是不明白为什么会出现。我不是试图将Button转换为ProgressBar。我不明白......

2 个答案:

答案 0 :(得分:20)

尝试清理项目,以便再次生成R类。有时价值观不会更新。

答案 1 :(得分:6)

看起来像这一行:

final ProgressBar progressbar = (ProgressBar) findViewById(R.id.progressBar1); /* here */

正在将一个Button转换为进度条。

这意味着findViewById会返回R.id.progressBar1的按钮。

由于您说您更改了订单,因此该ID仍然对应于该按钮。这表明生成的文件存在问题。 我会做一个Project / Clean