Android中的findViewById出错

时间:2014-01-17 12:06:51

标签: android findviewbyid

我在speed = (TextView) findViewById(R.id.speed);中收到错误,说“速度无法解决或者不是字段”

我的布局是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SpeedometerActivity" >

    <Button
        android:id="@+id/download"
        android:layout_width="150dp"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="13dp"
        android:layout_marginLeft="300dp"
        android:text="Begin Test" />

    <TextView
        android:id="@+id/speed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/meter"
        android:layout_marginLeft="191dp"
        android:layout_marginTop="55dp"
        android:layout_toRightOf="@+id/meter"
        android:text="TextView"
        android:textSize="20dp"
        android:textColor="#000000"/>

</RelativeLayout>

我的MainActivity

public class MainActivity extends Activity {

    TextView speed;
    Button download;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.speedometer);

        download = (Button)findViewById(R.id.download);
    }

    @Override
    protected void onResume() {
        super.onResume();
        h = new Handler();
        new speedTask().execute();
        speed = (TextView) findViewById(R.id.speed);
    }
}

请有人帮我解决这个问题。

4 个答案:

答案 0 :(得分:4)

"speed cannot be resolved or it is not a field"

检查资源文件中是否有任何错误。按照黑带的建议。如果资源文件中有错误,则不会生成R.java。修理它。还要检查您是否import android.R;如果删除它。

你还有

<TextView

    android:id="@+id/speed"

它是一个文本视图

将其投射到按钮

 speed = (Button)findViewById(R.id.speed);

应该是

 TextView speed =(TextView) findViewById(R.id.speed);

答案 1 :(得分:2)

您应该检查导入的R类是否是您的项目而不是Android的类。你正在向错误的对象施放,正如@Raghunandan

中所说的那样

答案 2 :(得分:1)

这里是类型转换TextView到Button。所以请更改您的代码如下。

TextView speed = (Button)findViewById(R.id.speed);

注意:在这里您无法导入项目R文件,首先请检查您的xml文件并尝试首先解决xml错误。

如果您已导入,请从活动中删除import android.R;

转到MainActivity.Java文件,然后按 CTRL + SHIFT + O 。它会自动导入所有必要的包。

答案 3 :(得分:0)

它创建了一个副本,所以给出如下

<!-- language: html -->    
<!DOCTYPE html>
<html>
<head>
<html> 
<head>   
<script>
  // Retrieve last key pressed.  Works in IE and Netscape.
  // Returns the numeric key code for the key pressed.
  function getKey(e)
  {
    if (window.event)
       return window.event.keyCode;
    else if (e)
       return e.which;
    else
       return null;
  }
  function restrictChars(e, obj)
  {
    var CHAR_AFTER_DP = 3;  // number of decimal places
    var validList = "0123456789.";  // allowed characters in field
    var key, keyChar;
    key = getKey(e);
    if (key == null) return true;
    // control keys
    // null, backspace, tab, carriage return, escape
    if ( key==0 || key==8 || key==9 || key==13 || key==27 )
       return true;
    // get character
    keyChar = String.fromCharCode(key);
    // check valid characters
    if (validList.indexOf(keyChar) != -1)
    {
      // check for existing decimal point
      var dp = 0;
      if( (dp = obj.value.indexOf( ".")) > -1)
      {
        if( keyChar == ".")
          return false;  // only one allowed
        else
        {
          // room for more after decimal point?
          if( obj.value.length - dp <= CHAR_AFTER_DP)
            return true;
        }
      }
      else return true;
    }
    // not a valid character
    return false;
  }
</script>
</head>
<body>
<form name="test">
  Input Number <input type="text" name="myNum" onKeyPress="return restrictChars(event, this)">
</form>
</body>

它会起作用!