2011-12-16 9 views
4

データベースに文字列リソースIDを格納していた場合、その行の下にいくつかのバージョンを戻すときに、リソースIDが目的の文字列を指し示すことが期待できますか?R.xxx.xxxリソースIDは静的バージョンから静的バージョンまでですか?

サンプルケース: "!私は快適な文字列だ"

  • ストアrecourceそれは文字列に を指す前提とIdを0x7f060003、中段の場合は 時間です。

  • リソースが必要ですが、Xバージョンが経過しても、リソースIDはまだを指していますか?「私は楽しいストリングです!

+0

:ここに は、私が使用しているものですか?複製された文字列が1つあれば、以下で概説する答えの10倍の複雑さが軽減されます。 – Blundell

+0

これはおそらくもっと賢明な考えです。 – AedonEtLIRA

答えて

4

Xバージョンが合格した場合は、ソースコードを変更したことを意味しますか?そしてapkを更新しましたか?

R idの整数はコンパイル時に作成されます。したがって、一度構築されたあなたのアプリで一定。

新しいレイアウト/ ID /図面を追加すると、IDのに変更されます。

+0

はい、私は、ソースコードが変更されたか、またはリソース修正を含むX回まで修正されたことを意味しました。リソースIDの変更を防ぐためにaaptを変更する方法はありますか? – AedonEtLIRA

+0

私はそれについて知りませんが、汚れたハックは、あなたの名前を変更することができますaaaa_your_res_nameを変更したくないです。したがって、技術的に*常に最初にコンパイルされ、同じres idを持つことになります。 **しかし** **私はこの方法に頼らず、重くテストしません。 – Blundell

+0

よかった、素晴らしい、チップのおかげで。 – AedonEtLIRA

18

代わりにgetResources()。getIdentifier()を使用してください。こうすることで、idが変更された場合でも、その名前でリソースを取り出すことができます。

int resID = getResources().getIdentifier("nameofthedrawable", "drawable", "com.your.project"); 

あなたは、データベース内ressourceの名前だけを保存し、後でデータベースからressourcesを取得することができます。ここでは例です。

詳細はlinkをご覧ください。

+1

+1この解決策について:)このコードにもいくつかの欠点があることに注意してください。ドロワブルの名前は後で変更することなく変更できます。それはちょっとこれを監督する可能性が高いと思います。これを忘れると、非常に非常に難しいデバッグエラーが発生します! – poitroae

+0

このメソッドをR.id.xxxよりも使用するとパフォーマンスにどのような影響があるのか​​誰にも分かりますか? – milosmns

1

res/valuesディレクトリにpublic.xmlを作成することでリソースIDを修正できます。あなたはただの文字列が保存されませなぜDB内の文字列リソースのIDをハードコーディングした場合

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <public type="drawable" name="button" id="0x7f020000" /> 
    <public type="drawable" name="button_flat" id="0x7f020001" /> 
    <public type="drawable" name="button_flat_square" id="0x7f020002" /> 
    <public type="drawable" name="button_flat_vert" id="0x7f020003" /> 
    <public type="drawable" name="button_grey" id="0x7f020004" /> 
    <public type="drawable" name="right" id="0x7f020005" /> 
    <public type="drawable" name="left" id="0x7f020006" /> 
    <public type="drawable" name="up" id="0x7f020007" /> 
    <public type="drawable" name="down" id="0x7f020008" /> 
    <public type="drawable" name="red" id="0x7f020009" /> 
    <public type="drawable" name="green" id="0x7f02000A" /> 
    <public type="drawable" name="yellow" id="0x7f02000B" /> 
    <public type="drawable" name="blue" id="0x7f02000C" /> 
    <public type="drawable" name="plus" id="0x7f020010" /> 
    <public type="drawable" name="minus" id="0x7f020011" /> 
</resources> 
+1

この方法は、2015年にgradle 1.3.0がリリースされて以来、動作していません。次は対応する問題へのリンクです:https://code.google.com/p/android/issues/detail?id=182046 – Stanislav

関連する問題