Skocz do zawartości
foregare

Kilka klas w jednym pliku

    Rekomendowane odpowiedzi

    Witam, od razu przejdę do tematu - mam klasę publiczną, w której znajdują się listenery do przycisków. Tymi przyciskami chcę wywoływać inne klasy, ale z uwagi na złożoność aplikacji chciałbym, aby w jednym pliku znajdowało się po kilka klas. Zdaję sobie sprawę, że w jednym pliku może być tylko jedna publiczna klasa, a pozostałe  to prywatne. Tak więc zbudowałem kod, w android studio nie wywala mi błędu i aplikacja buduje się, ale po jej uruchomieniu i po próbie wywołania kolejnej klasy przyciskiem, robi się biały ekran i powraca do klasy startowej a nie uruchamia się klasa wywoływana która powinna wyświetlić Tekst2. Oto kod obrazujący problem. Kod ograniczyłem tylko do jednej opcji dla przejrzystości, w realu jest ich więcej. Czy ktoś wskaże co robię źle. Czy to jest tak, że muszę umieszczać każdą klasę w osobnym pliku, żeby między nimi "przeskakiwać" ? 

     

    public class act_2_1_getting_started extends AppCompatActivity implements View.OnClickListener {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.act_2_1_getting_started);
    
            TextView leng= (TextView) findViewById(R.id.leng) ;
            leng.setText("Tekst1");
            Button opcja1 = (Button) findViewById(R.id.opcja1);
            opcja1.setOnClickListener(this);
            
        }
        public void onClick(View view) {
            Intent intent;
            switch (view.getId()) {
                case R.id.opcja1:
                    intent = new Intent(this, pod1.class );
                    startActivity(intent);
                    break;
            }
    
    
        }
    
        private class pod1 extends AppCompatActivity implements View.OnClickListener {
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.act_2_1_getting_started);
    
                TextView leng = (TextView) findViewById(R.id.leng) ;
                leng.setText("Tekst2");
                Button opcja1 = (Button) findViewById(R.id.opcja1);
                opcja1.setOnClickListener(this);
                        }
            public void onClick(View view) {
                Intent intent;
                switch (view.getId()) {
                    case R.id.opcja1:
                        intent = new Intent(this, zbieg.class );
                        startActivity(intent);
                        break;
                }
    
    
            }
        }
    
    }

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    Możesz mieć w jednym pliku kilka klas, tylko to nie jest poprawne. 1 aktywność == 1 plik. Jak już chcesz iść w ten temat to sprawdź statyczne klasy wraz z publicznymi.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @foregare tak po za konkursem: popracuj nad nazwami klas, metod i zmiennych - w Javie przyjęło się pisanie camelCasem :) W pliku powinna znajdować się tylko jedna klasa, może posiadać klasy wewnętrze. Klasy wewnętrzne powinny być jakoś powiązane z funkcjonalnością jaką wprowadza główna klasa, jeśli tak nie jest to nie jest dobrą praktyką robienie takich zagnieżdżeń. Jeśli tworzysz nową aktywność lub fragment to zdecydowanie przenieś to do osobnego pliku.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Czy to nie będzie problemem w procesie kompilacji, gdy aplikacja będzie posiadała np. tysiąc plików, w każdym po jednej aktywności ? Tych aktywności - patrząc na praktyczne ujęcie  - będę potrzebował po prostu do wyświetlania kolejnych tekstów w tekstview, w zależności od wyboru opcji button 1, 2, 3 itd. Zależności między aktywnościami są jak w diagramie - "drzewie", każda powiązana z inną poprzez odpowiedni button. Jestem początkującym i na obecnym etapie mojej wiedzy to wyświetlanie tekstów jestem w stanie ogarnąć poprzez switch / case, budując kolejne klasy do kolejnych pojedynczych tekstów. Chciałbym ze względu na ich wielość pakować po kilka klas, powiedzmy po 10, do jednego pliku. Chyba, że podpowiecie, jak zrobić takie "przeskakiwanie" między tekstami (powiedzmy że dziesięcioma) w jednej klasie, a ostatni z nich prowadziłby do kolejnej klasy w kolejnym pliku, w którym również miałaby ona kolejnych powiedzmy 10 tekstów. Czy mam o tym zapomnieć i kierować się zasadą - jeden tekst w textview równa się jedna klasa, a więc i jeden plik. Z góry dziękuję za podpowiedzi.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    To nie ma sensu, jeśli chcesz tylko wyświetlić tekst to porostu go wyświetlasz, nie potrzebujesz do tego nowego pliku/aktywności.

    Na przykład, robisz implementacje onClick() i tam sprawdzasz co zostało naciśnięte, jeśli X to robisz setText na "jakis tekst auuu auuu", jeśli naciśnięto Y to setText na "jakis tekst ble ble" itd. To tak w wielkim skrócie.

    Nie wiem co dokładnie chcesz zrobić, ale pętle switch będziesz miał dużą, jeśli chcesz mieć x tekstów/guzików.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Powiedzmy że mamy jeden plik xml z textview i trzema buttonami. I teraz w kodzie wyswietlam poprzez settext w textview pewien tekst1 , a buttonami chce sprawic, pojawil sie od buttona1 tekst2, od buttona2 tekst3, od buttona3 tekst4. I to sie dalej rozrasta bo od tekst2 buttony prowadza do kolejnych innych tekstow (5,6,7), od tekst3 do kolejnych (8,9,10), od tekst4 do kolejnych (11,12,13). A od tych kolejnych do jeszcze kolejnych. 

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Określmy jakie są wymagania co do Twojej funkcjonalności, implementację zostawmy póki co z boku. Czy chciałbyś, aby wykonanie jakieś akcji odblokowywało kolejne akcje i powodowało pojawienie się na ekranie nowej treści - czy dobrze Cię rozumiem?

    Wysłane z mojego FRD-L09 przy użyciu Tapatalka

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Tak dokładnie, napisy na butonach też będą różne, ale w ramach jednego xml. Jakby to chcieć zobrazować graficznie to wyglądałoby jak diagram, takie drzewo rozrastające się na różne możliwości. Generalnie wiem jak to zrobić, ale wiąże sie to z tworzeniem osobnego pliku do każdej jednej możliwości, a chciałem to uprościć i podzuelić przynajniej, że powiedzmy 10 możliwości odpowiednio powiązanych między sobą znajduje się w jednym pliku. Panuję nad ich uporządkowaniem, bo stworzyłem sobie diagram możliwości z odpowiednim nazewnictwem w osobnyn programie, więc zawsze jakby coś się poplątało to łatwo sobie to odnajdę.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    mmaciejow

    Jeżeli dobrze zrozumiałem to masz 3 przyciski:

    Przycisk_1 / Przycisk_2 / Przycisk_2

    i zakładam, że przycisk Przycisk_1 ma np: = -1 Przycisk_2  = 0 / Przycisk_3 = +1 

    Do każdego przycisku na początku przypisz zmienną int

    Przycisk_1 - 0 / Przycisk_2 - 1 / Przycisk_2 - 2

    Następnie w onClick sprawdzaj co naciśnięto i w zależności co naciśnięto dodawaj / odejmuj liczbę  Przycisk_2 powinien być Twoim punktem wyjścia i w zależności jaki ma liczbę będzie wyświetlany tekst. A tekst umieść w xml jako array i pobieraj rekordy według Przycisk_2. Jeżeli będzie to nr 1 to ... jeśli nr to....

    Nie wiem czy o to Ci chodziło, ale mam nadzieje, że nakierowałem Cię na realizację. Pamiętaj, że jeśli Przycisk_1 ma 0 nie może być aktywny, tzn nie możesz już wykonać odejmowania. Nie ma wartości ujemnych w tablicach. 

     

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    @foregare czy udało nam się rozwiązać Twój problem? Jeśli nie to napisz do mnie na PW i razem spróbujemy rozpisać cały problem i wrzucimy tu jego rozwiązanie

    Wysłane z mojego FRD-L09 przy użyciu Tapatalka

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x