3

Android開発に関しては非常に初心者なので、ご容赦ください。現在、Windows 8 / Eclipse を使用しています。

私の問題は、findViewById間違って使用している可能性は非常に高いですが、関数が狂ったように見えることです。

アプリは正常に動作TextViewしていましたが、完全に混乱しているように見えるいくつかの新しい をページに「ドロップ」しました。

この findViewById関数は、間違ったコントロールを完全に見つけるか、何も見つけられない (そして null を返す) ようになりました。ファイルを確認しましactivity_main.xmlたが、ID はまだ正しいです。

誰でも助けることができますか?

これは私の使用法の典型的な例です:

public void toggleButtonNetwork_Click(View v) {
  ToggleButton tb = (ToggleButton) this.findViewById(R.id.toggleButtonNetwork);//did work, now does not work!
}

私が追加できる唯一の洞察は、私の R.java ファイルが動作していたときに次のようになったことです。

...
    public static final class id {
      public static final int menu_settings=0x7f070004;
      public static final int textViewGPS=0x7f070003;
      public static final int textViewNetwork=0x7f070001;
      public static final int toggleButtonGPS=0x7f070002;
      public static final int toggleButtonNetwork=0x7f070000;
    }
...

そして今、このように見えます(壊れています):

public static final class id {
    public static final int menu_settings=0x7f070006;
    public static final int textView1=0x7f070004;
    public static final int textView2=0x7f070005;
    public static final int textViewGPS=0x7f070002;
    public static final int textViewNetwork=0x7f070003;
    public static final int toggleButtonGPS=0x7f070000;
    public static final int toggleButtonNetwork=0x7f070001;
}
4

3 に答える 3

5

これは非常に一般的な問題です。Project/Clean...プロジェクトで を呼び出してみてください。クラスの自動生成Rがうまくいかず、再構築が必要になる場合があります。

于 2013-02-10T17:54:35.063 に答える
3

すべてが順調です。

常にproject -> cleanに移動し 、run よりも実行します。それでおしまい。

于 2013-02-10T17:56:01.083 に答える
1

これはあなたの質問に答えません。A--Cs のコメントは正しいと思います。

しかし、混乱することは何もありません。 findViewByIdは本当に簡単です。

アプリをコンパイルすると、コンパイラは R.java を生成し、レイアウト XML (および文字列、ドローアブル、色など、「リソース」であるすべてのもの) の各ビューに行を追加し、一意の ID を付与します。

public static final int toggleButtonNetwork=0x7f070001;

リソースを変更すると ID が変更されますが、問題ありません。を使用するときはfindViewById、「わかりやすい名前」を付けます。この場合R.id.toggleButtonNetworkは にコンパイルされます。これは0x7f070001public static final int toggleButtonNetworkが静的定数であるためです。

通常は setContentView を使用して XML からビューを拡張すると、オブジェクトのビュー階層が構築されます。各オブジェクトの ID は、R.java で見つかった ID です。

findViewByIdタイプのオブジェクトへの参照を返しますView。これを使用する理由であるビューのタイプにキャストします

= (Button)findViewById(R.id.toggleButtonNetwork);
于 2013-02-10T18:02:02.817 に答える