【问题标题】:String cannot be cast to android.widget.Button字符串不能转换为 android.widget.Button
【发布时间】:2017-02-21 14:06:48
【问题描述】:

我正在尝试动态添加按钮,并连续添加这些按钮。
在下面我的代码摘要中,我有这个错误:

java.lang.String cannot be cast to android.widget.Button

我一直在搜索类似的错误消息,但我无法解决我的问题。
这是我的代码:

for (int i = 1; i < 5; i++) {
   a=a+a;
  FrameLayout.LayoutParams a = new FrameLayout.LayoutParams(262, 146);
  a.leftMargin = coorX; coorX = coorX + 250; 
  FrameLayout layout = (FrameLayout) findViewById(R.id.layout1);
  layout.addView (((Button)boton.get(i)),a); // here's the error
  ((Button)boton.get(i)).setOnClickListener(new View.OnClickListener(){
       @Override
       public void onClick(View view) {
          switch (((Button)view).getId()){
             case 1: recuadro("wǒ", 1); break;
             case 2: recuadro("hěn", 2); break;
             case 3: recuadro("ne", 3); break;
             case 4: recuadro("nĭ ne?", 4); break;
             case 5: recuadro("yě", 5); break;
          }
  });

}

【问题讨论】:

  • 这就像你想把苹果变成香蕉。
  • 解决办法是把苹果一直传到它想要苹果的地方。
  • 将字符串传递给字符串,将按钮传递给按钮。不管是同类型的。

标签: android casting android-button


【解决方案1】:

尝试创建一个按钮而不是添加一个字符串

new Button("Here the string");

在你的情况下:

new Button(boton(i))

编辑

for (int i = 1; i < 5; i++) {
   a=a+a;
  FrameLayout.LayoutParams a = new FrameLayout.LayoutParams(262, 146);
  a.leftMargin = coorX; coorX = coorX + 250; 
  FrameLayout layout = (FrameLayout) findViewById(R.id.layout1);
  Button buttonToAdd = new Button(boton.get(i));
  layout.addView (buttonToAdd,a); // here's the error
  buttonToAdd.setOnClickListener(new View.OnClickListener(){
       @Override
       public void onClick(View view) {
          switch (((Button)view).getId()){
             case 1: recuadro("wǒ", 1); break;
             case 2: recuadro("hěn", 2); break;
             case 3: recuadro("ne", 3); break;
             case 4: recuadro("nĭ ne?", 4); break;
             case 5: recuadro("yě", 5); break;
          }
  });

}

如果我没记错的话就是这样。

【讨论】:

  • 对不起,我不是专家,但我不知道在哪里以及如何创建按钮而不是添加字符串。
【解决方案2】:

boton 是一个字符串列表,您将其元素转换为Buttons。因此,错误消息java.lang.String cannot be cast to android.widget.Button

【讨论】:

  • 在这种情况下,我该怎么做才能将我的字符串按钮转换为按钮?
  • 您需要创建按钮。代替layout.addView (((Button)boton.get(i)),a);,先执行Button button = new Button(boton.get(i));,然后执行layout.addView (button,a);,然后执行button.setOnClickListener(..... the rest of your code)
  • 我已应用游览建议,但代码中出现错误消息:Button (...) cannot be applied to java.lang.Object 它可能是什么?我的代码现在会是这样吗?: FrameLayout layout = (FrameLayout) findViewById(R.id.layout1);按钮 button = new Button(boton.get(i)); // 你的建议 layout.addView (button,a) (Button)boton.get(i)).setOnClickListener(new View.OnClickListener() { ...
  • 这是我建议的一半。你错过了另一半。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2017-11-27
  • 2015-04-21
  • 1970-01-01
相关资源
最近更新 更多