Skocz do zawartości

Znajdź zawartość

Wyświetlanie wyników dla tagów 'fragmenty' .



Więcej opcji wyszukiwania

  • Wyszukaj za pomocą tagów

    Wpisz tagi, oddzielając je przecinkami.
  • Wyszukaj przy użyciu nazwy użytkownika

Typ zawartości


Forum

  • Społeczność android.com.pl
    • Regulaminy Forum
    • Przywitaj się!
    • Android.com.pl
    • Konkursy
    • OFF-Topic
  • Android
    • Nowości i plotki
    • FAQ Android
    • Android 10
    • Android 9.0 Pie
    • Android 8.0 Oreo
    • Android 7.0 Nougat
    • Android 6.0 Marshmallow
    • Android 5.0 Lollipop
    • Android 4.4 KitKat
    • Archiwum Android
    • Software PC
  • Gry i Aplikacje
    • Aplikacje Android
    • Gry Android
    • Poszukiwania gier i aplikacji
    • Porównania gier i aplikacji
    • Android Wear - Smartwatch
    • Modyfikacje Wizualne
    • Download
    • Multimedia
  • Co i gdzie kupić?
  • Programowanie
  • Modyfikacje Android OS
  • Elektronika
  • Honor
  • Google
  • HTC
  • LG
  • Samsung
  • Sony
  • Motorola
  • Huawei
  • Xiaomi / MIUI
  • OnePlus
  • Lenovo
  • Asus
  • myPhone
  • Pozostałe marki

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Od tej daty

    Do tej daty


Ostatnia aktualizacja

  • Od tej daty

    Do tej daty


Filtruj po ilości...

Znaleziono 3 wyniki

  1. Witam. Piszę aplikację, w której wykorzystuję WebView do otwierania kilku stron www, ale do końca nie wiem czym się różni Activity od Fragment, większość przykładów na stackoverflow i ogólnie w necie jest pokazana na Activity, ale z tego co zauważyłem to nasze aplikacje w telefonach korzystają w większości przykładów z Fragmentów? I czy mogę użyć, albo czego powinienem użyć do wyświetlania stron, chodzi mi o WebView, normalnie wykorzystywałem, do tego Activity, ale jedną ze stron odpalam (to WebView) we Fragmencie i też działa, tylko mam czasami problem z TITLE który sam sobie ustawiam na pasku AppBar (Toolbar) i wywala mnie z apki przez to. Tak więc do WebView co jest bardziej wskazane Activity czy Fragmenty? Zauważyłem też, że np w activity jak odpalę jakąś stronę i zacznę coś na tej stronie robić, przejdę do jakiejś innej podstrony, to po naciśnięciu button back czyli wywołanie metody public void onBackPressed() cofa mnie tak jak powinno, czyli do poprzedniej podstrony, lub strony głównej, w Fragmencie tak niestety nie mam, cofa mnie do ostatniego widoku w aplikacji, dlatego też pytam kiedy i do czego jest bardziej wskazane Activity a do czego Fragmenty, jak prawidłowo z tego korzystać itd ??? Dodam kod Fragmentu z WebView może się przyda public class AdBlastFragment extends Fragment { SharedPreferences sharedPreferences; ProgressDialog pd = null; ProgressBar progressBar = null; private SwipeRefreshLayout swipe; private WebView webView; // private NestedWebView webView; public static final String MyPREFERENCES = "AdBlast"; private String login; private String password; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "T:AG"); wakeLock.acquire(); getActivity().getWindow().addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); final View view = inflater.inflate(R.layout.website, container, false); sharedPreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); login = sharedPreferences.getString(this.getString(R.string.keyLogin), ""); password = sharedPreferences.getString(this.getString(R.string.keyPassword), ""); swipe = (SwipeRefreshLayout) view.findViewById(R.id.swpie); swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { LoadWeb(view); } }); LoadWeb(view); wakeLock.release(); return view; } public void LoadWeb(View view) { webView = (WebView) view.findViewById(R.id.website); WebSettings webSettings = webView.getSettings(); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); // webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.getSettings().setAppCacheEnabled(true); webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webSettings.setDomStorageEnabled(true); webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webSettings.setUseWideViewPort(true); webSettings.setSavePassword(true); webSettings.setSaveFormData(true); webSettings.setEnableSmoothTransition(true); swipe.setRefreshing(true); webView.loadUrl("https://adblast.alternet.com/auth"); final String js = "javascript:document.querySelector('input[name=email]').value='" + login + "';" + "document.querySelector('input[name=password]').value='" + password + "';" + "document.getElementById('submit').click()"; webView.setWebViewClient(new WebViewClient() { // @Override // public boolean shouldOverrideUrlLoading(WebView view, String url) { // if (Uri.parse(url).getHost().equals("https://adblast.alternet.com/home")) { // //open url contents in webview // return false; // } else { // //here open external links in external browser or app // Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); // startActivity(intent); //// //// Intent intent = new Intent(Intent.ACTION_VIEW, AdBlastFragment.class); // Uri.parse(url) //// startActivity(intent); // //// FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); //// fragmentTransaction.addToBackStack("tag of fragment"); // dzięki temu działa onBackPressed() //// fragmentTransaction.replace(R.id.content_frame, new AdBlastFragment()); //// fragmentTransaction.commit(); // return true; // } // } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("XXXXXXXXXXXXXXXXX", "your current url when webpage loading.." + url); pd = new ProgressDialog(getActivity()); pd.setTitle("Please Wait.."); pd.setIcon(R.drawable.ad); // pd.setProgressStyle(1); pd.setMessage("Website is Loading.."); pd.show(); super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { Log.d("YYYYYYYYYYYYYYYYYY", "your current url when webpage loading.. finish" + url); pd.dismiss(); if (Build.VERSION.SDK_INT >= 19 && !login.isEmpty() && !password.isEmpty()) { view.evaluateJavascript(js, new ValueCallback<String>() { @Override public void onReceiveValue(String s) { } }); } swipe.setRefreshing(false); } }); webView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int newProgress) { ((MainActivity) getActivity()).setActionBarTitleAndIcon("Page loading : " + newProgress + "%", 0); if (newProgress == 100) { ((MainActivity) getActivity()).setActionBarTitleAndIcon(view.getTitle(), 0); } } }); } } I jeszcze jedno małe pytanie czy jest możliwość, żeby SWIPE po odświeżeniu nie cofało mnie do strony głównej, tylko odświeżyło tą stronę/podstronę gdzie się aktualnie znajduję?
  2. Coders Lab

    Fragmenty - podstawowe informacje

    Słów kilka na temat fragmentów w androidzie… Pamiętam, że gdy zaczynałem swoją przygodę z androidem i dotarłem do tematu fragmentów czułem się lekko zagubiony. „Po co to komu, skoro mogę sobie zrobić równie dobrze drugą aktywność i mieć tam wszystko to co miałbym w fragmencie” - tak sobie wtedy myślałem. Później gdy już zacząłem rozumieć fragmenty, to wszystko chciałem robić na fragmentach - ale tak totalnie wszystko, wszystko. Z perspektywy czasu widzę, że nie była to wcale tak cudowna droga jak na początku mi się wydawało. Trzeba odnaleźć złoty środek między tym co warto zrobić fragmentem, a tym co powinno zostać aktywnością. Kończmy ten wstęp i zaczynajmy. Czym jest fragment? Fragment jak sama nazwa wskazuje to „fragment” (czyli kawałek) aktywności - właściwie to widok z logiką przyczepiany do aktywności. To co odróżnia fragment od widoku, to fakt że fragment może posiadać swoją własną logikę. Aktywność może posiadać jednocześnie wiele fragmentów. Zaprezentuję teraz kilka przykładów z fragmentami w różnych kombinacjach. Będę do ich oznaczenia używał 2 kolorów: żółtego oraz zielonego. Na zamieszczonym wyżej obrazku widzimy aktywność, która posiada jeden fragment (żółty). Jak widać po lewej stronie na górze znajduje się navigation drawer, po kliknięciu na element z jego menu zapewne nastąpi podmiana fragmentu. Jest to w mojej opinii najczęstsze wykorzystanie fragmentu, rozwiązanie to pozwala na szybką i wygodną nawigację po aplikacji. Nie ma tu jednak niczego czego nie bylibyśmy w stanie wykonać bez tworzenia nowej aktywności. Idźmy dalej. Widzimy teraz sytuację, w której to na ekranie pojawiają się jednocześnie 2 różne fragmenty (żółty oraz zielony). Możesz powiedzieć „No ale po co? Dodatkowe komplikacje tylko…wszystko mógłbym mieć w jednej aktywności.” - w zasadzie masz rację. Możesz wszystko wrzucić do jednej aktywności, ale pomyśl jak „przyjemnie” będzie Ci się wtedy dokonywało zmian w takim klocu po 2, 3 lub 4 miesiącach. Jeden wielki widok, logika zbita na siłę do kupy w jednym miejscu - nadal uważasz, że fajniej będzie mieć to w jednej aktywności? Idź dalej. A co Ty na to? Masz tutaj 2 identyczne fragmenty (żółty 1 oraz żółty 2). Pewnie powiesz, że mogę sobie przecież zrobić widok i dodać go w po prostu layoucie i wyjdzie na to samo. No w zasadzie tak, ale co z kodem związanym z logiką? Wszystko do aktywności? Chcesz później pracować z takim klocem? Przychodzi mi do głowy jeszcze jedno - skoro one są takie same, to czy nie zduplikujesz kodu? A jeśli nawet nie to co sądzisz powiesz wtedy o jego czytelności i złożoności? Pomyśl też o nazwach zmiennych i pól - bt_power_a, bt_power_b, chyba nie chcesz zrobić tego sobie i swoim kolegom ?Idźmy dalej. Wow! Czy to fragment nad fragmentem? Tak! To dokładniej fragment żółty nad zielonym, a w realnym życiu najczęściej to po prostu Twój monit, który stworzyłeś dziedzicząc po klasie DialogFragment, która to z kolei dziedziczy po klasie „Fragment”. Powiem więcej, każdy wcześniej pokazany żółty fragment to właśnie ten fragment - w końcu dziedziczy po fragmencie, więc możesz go używać jako zwykły fragment, jak i jako monit z racji takiej, że dziedziczysz po DialogFragmencie. Co się dzieje z używanymi fragmentami? To zależy od tego czy odkładasz je na stos czy nie. Jeśli nie to sprawa jest prosta - są niszczone, jeśli tak otwarcie kolejnego fragmentu następuje „nad” obecnym fragmentem. Stos pozwala stworzyć historię odwiedzanych przez użytkownika fragmentów, możesz do tego zaimplementować własną nawigację umożliwiającą wędrowanie po historii po przez naciskanie przycisku „cofnij”. Cykl życia fragmentu vs cykl życia aktywności Fragmenty posiadają swój własny cykl życia, jednak z racji tej że są wyświetlane w aktywności to cykl ten jest ściśle powiązany z cyklem życia aktywności - czyli w aktywności poszczególne fragmenty mogą umrzeć, a aktywność dalej będzie żywa, ale odwrotna sytuacja nie może nastąpić. Myślę, że poniższy wykres (pochodzący ze strony Google, z działu o fragmentach) ładnie to wyjaśnia. Kiedy nie warto używać fragmentów Na to pytanie nie ma prostej odpowiedzi. To trzeba wyczuć kiedy warto ich używać, a kiedy wprowadzą tylko więcej zamieszania - bo tak się może zdarzyć. Jeśli nie planujesz tworzyć mocno rozbudowanego menu, lub będziesz potrzebował umożliwić innym aplikacją otwarcie Twojej aplikacji na konkretnej aktywności to sens używania fragmentów zanika. Problem gubienia fragmentów Gdy pracowałeś z DialogFragmentem zapewne zauważyłeś, że po obrocie ekranu dialog tej przestaje poprawnie reagować na zdarzenia - np. OnClick nie działa. Wynika to z faktu, że klikając w przycisk odnosisz się do niewłaściwego dialogu. Ten który stworzyłeś przed obrotem ekranu przestał już istnieć, w jego miejsce pojawił się nowy. Aby uniknąć sytuacji, w której przestajesz mieć kontrolę nad dialogiem powinieneś używać sensownych tagów (do utworzenia dialogu wymagane jest podanie taga). Umożliwiają one odnalezienie dialogu i ustawienie komunikacji na niego. Wszystko o czym mówię sprowadza się do tej jednej linijki kodu: val uninstallPackageDialog: UninstallPackageDialog? = fragmentManager!!.findFragmentByTag(UninstallPackageDialog.TAG) as UninstallPackageDialog? w Javie wyglądałoby to tak: uninstallPackageDialog = (UninstallPackageDialog) getSupportFragmentManager().findFragmentByTag(UninstallPackageDialog.TAG); if(uninstallPackageDialog != null){ ... } Dajcie znać czy Wam się podobało i napiszcie o czym jeszcze chcielibyście poczytać Specjalnie dla Android.com.pl Łukasz Bednarczyk
  3. Witam, pracuje nad aplikacja która ma za zadanie połączyć się z bazą danych a następnie wyświetlić sylabus(program nauczania przedmiotu) dla danego przedmiotu. Zrobiłem już połączenie z bazą. Mam jednak problem jak wyświetlić ten sylabus. Wiem że muszę użyć fragmentów aby wygenerować coś zbliżonego do widoku mobilnego gdy przeglądamy dokument worda na smartfonie. Ale żeby to zrobić to muszę najpierw te dane pobrać i wyświetlić w czymś. I tu chciałbym prosić o pomoc. Czego mam użyć aby te dane po wyświetleniu wyglądały jak dokument worda? Przecież nie umieszcze tego w TextView. W załączniku jest schemat sylabusu. Sylabus-wzór.docx
x