別のxmlファイルの他のレイアウトで同じID名を使用できますか??? coz私はそれをやったので、おそらくそれが原因で、m nullpointer例外が発生し、そのxmlのアクティビティが開始されません...
1 に答える
絶対。Widget
必要な数のレイアウトで同じタイプに同じ ID を使用できます。同じレイアウト XML 内の同じ ID ではありません。もちろん、これが推奨されるかどうかの議論に入ることなく.
何人かの開発者を混乱させていますが、私が始めたときは、私も混乱しました。たとえば、Activity で Widget をキャストするとき、いくつかの異なるレイアウトで同じ ID を持っていたのに、なぜ 1 つの一致する ID しか持っていなかったのか、しばしば困惑しました。
世話をする必要がある唯一のことは、たとえば、次のシナリオを検討することです。
layout_1.xml
sayとという名前の 2 つの XML と、それにlayout_2.xml
対応するsay と という名前の 2 つの XML があります。現在、どちらも同じを持ち、両方の XML で同じ ID を持っています。( )。これは、NullPointerがコメントで述べていることとはまったく矛盾しています。彼は、同じ XML で同じ ID を使用できないことを意味していたと思います。Activities
Act1
Act2
Widget
TextView
Although I am using this example, this is not hypothetical. This is actually how it is in an application of mine
<TextView
android:id="@+id/txtFromName"
style="@style/UserName"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:ellipsize="marquee"
android:gravity="top|left|center"
</TextView>
コードでこれをキャストするとき、入力を開始したときに提案に何が表示されるかを確認しますfindViewById(R.id.txtFrom...)
複数の XML ファイルで同じ ID を使用する場合にNPEが発生する理由は、おそらく ID の混乱によるものです。対応する XML を開いたままにして、キャスト時に ID を確認してください。それでも問題が解決しない場合は、XML コード、Java コード、および LogCat クラッシュ レポートで投稿を更新することをお勧めします。
ID を文字通りコピーし、キャスト時にウィジェットのインスタンスと同じ名前を使用することで、それを追跡します。しかし、それは私が思うに私のやり方です。