私はこのコードを持っています
final static int TITLE_ID = 1;
final static int REVIEW_ID = 2;
次に、メインクラスに新しいレイアウトを作成します
public View createContent() {
// create linear layout for the entire view
LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
layout.setOrientation(LinearLayout.VERTICAL);
// create TextView for the title
TextView titleView = new TextView(this);
titleView.setId(TITLE_ID);
titleView.setTextColor(Color.GRAY);
layout.addView(titleView);
StarView sv = new StarView(this);
sv.setId(REVIEW_ID);
layout.addView(sv);
return layout;
}
しかし、TITLE_IDとREVIEW_IDを呼び出すと、エラーが発生します
間違ったタイプのリソース識別子を指定しています。
たとえば、Resources.getString(int id)を呼び出すときは、R.drawable.somethingではなくR.string.somethingを渡す必要があります。
特定の定数セットの1つを予期するメソッドに間違った定数を渡します。たとえば、View#setLayoutDirectionを呼び出す場合、パラメーターはAndroid.view.View.LAYOUT_DIRECTION_LTRまたはAndroid.view.View.LAYOUT_DIRECTION_RTLである必要があります。
このコードを実行しても問題はありません。なぜエラーになるのか不思議に思っています。何か案が?
これはコンパイラエラーではありません。これは、Idを処理する一般的な方法ではないため、単なるエディター検証エラー(lint警告)です。
アプリがAPI 17以降をサポートしている場合、
View.generateViewId として呼び出すことができます
titleView.setId(View.generateViewId());
そして
sv.setId(View.generateViewId());
およびAPI <17
res/values/
フォルダーを開きますids.xml
というxmlファイルを作成します次のコンテンツ:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="titleId" type="id" />
<item name="svId" type="id" />
</resources>
次に、コードで、
titleView.setId(R.id.titleId);
そして
sv.setId(R.id.svId);
この警告を無効にするには(必要な場合)
Android Studioは、この「エラー」の行の電球をクリックします。最初のサブメニューで検査を無効にするを選択します。
Build.gradleファイルでlintを無効にすることもできます。これらの行をbuild.gradleファイルに追加します。
Android {
lintOptions{
disable "ResourceType"
}
}
ビューIDを生成できない(つまり、ビューが実際に存在する前にIDを定義する)人々の問題を「修正」する代わりにこれを含め、彼らが何をしているかを知っています。
問題を含む変数宣言またはメソッドのすぐ上に、@SuppressWarnings("ISSUE_IDENTIFIER")
を含めるだけで、そのインスタンスのlint警告を無効にします。
この場合、@SuppressWarnings("ResourceType")
になります
一般的な方法を使用して警告タイプを無効にすると、悪い習慣になり、メモリリークや不安定なコードなどの予期しない問題が発生する可能性があります。ごみを公開しないでください。
Disable inspection
のオプションを元に戻し、build.gradleから次の行を削除してください。
Android {
lintOptions{
disable "ResourceType"
}
}