次の問題を解決する方法について、あなたの考えを読みたいと思います。私が取り組んでいるアプリケーションの基本的な要件は次のとおりです。
- 1 つの都市の複数の場所を地図上に表示します。
- 複数の都市のサポート。
- 別の詳細ビューに場所のプロパティを表示します。
- 各都市のロケーション プロパティは異なります。
マップの位置に基づいて都市を切り替える柔軟な決定ロジックを実装したいと考えています。つまり、私が頼りにしている最初の情報は、マップの中心です。これが理論上のワークフローです。
- マップから現在の中心位置を取得します。
- 場所を都市のURLとuriに変換します。
- URL を使用して HTTP 経由で場所をダウンロードします。
- 場所をローカル データベースに保存します。場所のプロパティが異なるため、都市ごとに 1 つのテーブル。
- URI を使用してコンテンツ リゾルバーからキャッシュまたはダウンロードされたデータを読み込みます。
- オーバーレイ アイテムを作成し、uri 参照と一意の idを含めます。
- 場所をタップすると詳細ビューが開きます。
- 詳細ビューは、都市固有の場所のプロパティをレンダリングする必要があります。
- 場所のプロパティは、渡された uri と一意の ID に基づいて、コンテンツ リゾルバーを介して再度読み込まれます。
質問:
- クラスを使用して都市、列名などのクエリパラメーターを切り替える方法に特に興味があります。
UriMatcher
- 都市ごとに1 つの詳細ビューを用意していただけますか? または、利用可能なプロパティ情報に基づいて、テキスト フィールド、ラベルなどを交換するための実用的な解決策はありますか?
さまざまなプロパティを説明するために、2 つの都市とコンテンツ プロバイダーの例を次に示します。
例:
public class DatabaseParis {
public static final class Contract {
public static final String COLUMN_LATITUDE = "latitude";
public static final String COLUMN_LONGITUDE = "longitude";
public static final String COLUMN_NAME = "name";
}
そして別の都市...
public class DatabaseDenver {
public static final class Contract {
public static final String COLUMN_LATITUDE = "lat";
public static final String COLUMN_LONGITUDE = "lon";
public static final String COLUMN_HEIGHT = "height";
public static final String COLUMN_DIAMETER = "diameter";
}
そしてコンテンツプロバイダー...
public class CustomContentProvider extends ContentProvider {
public static final class Contract {
public static final Uri URI_PARIS = Uri.parse("content://" + AUTHORITY + "/cities/paris");
}
private static final String AUTHORITY = "com.example.cities.locations";
private static final int URI_CODE_PARIS = 0;
private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
static {
URI_MATCHER.addURI(AUTHORITY, "cities/paris", URI_CODE_PARIS);
}
すべてのデータベース参照を 1 つにまとめることは、将来データを同期する必要がある場合に問題になる可能性があることを読んだため、1 つまたは複数のコンテンツ プロバイダーを使用するかどうかはわかりません。