2012-12-12 15 views
5

Piszę aplikację na Androida, w której mam mnóstwo zmiennych, do których potrzebuję uzyskać dostęp w konkretnym działaniu (w zasadzie "model danych" dla małego rodzaju gry). Obecnie przechowuję je wszystkie w jednej ogromnej "kontenerowej" klasie, dzięki czemu mogę z łatwością odnieść się do nich bez zanieczyszczania mojej klasy aktywności. Przykład:Czy istnieje coś podobnego do systemu zasobów Androida na mniejszą skalę?

public class Model 
{ 
    private int a; 
    private String b; 
    private float c; 

    ... 

    public int getA() 
    { 
     return a; 
    } 

    public void setA(int a) 
    { 
     this.a = a; 
    } 

    public String getB() 
    { 
     return b; 
    } 

    public void setB(String b) 
    { 
     this.b = b; 
    } 

    public float getC() 
    { 
     return c; 
    } 

    public void setC(float c) 
    { 
     this.c = c; 
    } 

    ... 
} 

Jak widać, są one różnych typów, a wszystkie mają funkcje pobierające i ustawiające. Ale jest to uciążliwe przechowywanie ich w ten sposób. Chciałbym również powtórzyć grupy zmiennych, ale z tym płaskim formatem gettera/settera nie mogę tego zrobić.

Jestem świadomy systemu zasobów Androida, ale nie wydaje mi się to odpowiednie, ponieważ zmienne nie mają być przeznaczone dla całej aplikacji/globalne. Istnieją one tylko dla życia tej konkretnej aktywności i są programowo generowane za każdym razem, gdy zaczyna się działanie.

Zastanawiałem się nad umieszczeniem ich wszystkich w strukturze Map<String, Object>, gdzie mógłbym odwoływać się do każdej zmiennej za pomocą klucza String. To usunie potrzebę posiadania klasy kontenera z mnóstwem modułów pobierających i ustawiających, ponieważ mogę po prostu wywołać put lub get na mapie. Ale za każdym razem, gdy chciałbym uzyskać wartość z mapy, musiałbym rzutować na oczekiwany typ. Nie podoba mi się to brzmienie.

Ktoś ma lepsze rozwiązanie? Czy istnieje coś podobnego do systemu zasobów Androida, które może być używane w mniejszej, bardziej tymczasowej skali?

+0

Jeśli się klasę i zmiennych statycznych można uzyskać dostęp do zmiennych wszędzie. Nie jestem pewien, czy o to ci chodzi. – Tooroop

Odpowiedz

0

Nie jestem pewien dlaczego, jeśli mają one na celu modelowanie stanu działania, nie zdefiniowano faktycznych klas dla każdego obiektu modelu. To byłaby moja sugestia. Podejmujesz tutaj podejście przypominające bardzo podobne do C, po prostu rzucając je w jedną klasę razem. Ponadto, ponieważ twój kod nie pokazuje statycznych pobierających i ustawiających, musisz jakoś utworzyć i uzyskać dostęp do klasy kontenera, nie? Opierając się na tym małym urywku i bez większego kontekstu trudno jest uzyskać lepszą odpowiedź.

+0

Definiować klasy dla każdego obiektu modelu? Nie jestem pewien, co masz na myśli przez to ... –

0

Można zdefiniować niestandardowy plik zasobów xml dla każdego działania. Pliki te są przechowywane w folderze/xml na tym samym poziomie, co folder/src. Użyj klasy Resources, aby je załadować.

Albo spojrzeć na ten problem: Dynamic Resource Loading Android