私はちょうどAndroid開発の楽しい世界に挑戦しましたが、私が取り組んでいるテストアプリでは非常に奇妙な問題がありました。アンドロイドの子コンポーネントでIDの重複を避けるにはどうすればよいですか?
このアプリケーションでは、各TableRowにEditTextといくつかのボタンが含まれているTableLayoutが使用されています。
TableRowsは、実行時に追加および削除できます。私が誤ってデバイスを傾けるまで、すべてが正常に動作しているように見えました。ディスプレイは応答してレイアウトを再配置しましたが、突然すべての値が各行で同じでした。
頭が傷ついた後、私は何が起こっているのか把握しました。オリエンテーションの変更により、Androidがアクティビティを再開していました。これが起こると、Androidはインスタンスの状態を保存して復元しようとしますが、コンポーネントIDに関連するデータを格納することでこれを行います。
私の場合、行はすべて同じレイアウトから作成されるため、すべての行のEditTextは同じIDを持ちます。結果は、私が知る限り、情報が保存されると、各行に上書きされるため、最後の行が優先されます。
復元時には、そのIDに関連付けられた値は1つだけなので、すべての行に適用されます。
私の場合は、とにかく値を保持する必要がないため、私はそれを回避することができました。私のonSaveInstanceStateでは、私はsuper.onSaveInstanceStateを呼び出さず、同様にonRestoreInstanceStateを呼び出します。
最後に私の質問に私をもたらします!
これらの個々の行の値を保存して復元するにはどうすればよいですか?再利用コンポーネント(私の場合はTableRow)に一意のIDを生成するための受け入れられた方法がありますか?
あなたはこれに適した解決策を見つけましたか?私は同じ問題を抱えています。 –
私が言ったように、私は実際に値を保持する必要はありませんでしたが、あなたの目標APIレベルに応じて、View.generateViewId()http://developer.androidを試すことができます。com/reference/android/view/View.html#generateViewId%28%29 – xtempore