Skocz do zawartości

Znajdź zawartość

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



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 14 wyników

  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. Witam, Mam aplikację, w której zamiast aktywności wykorzystuję fragmenty. W jednym z nich potrzebuję dodać kilka playerów z youtuba. Dotychczas udało mi się dodać tylko jeden i wszystko działa dobrze. Problem pojawia się wtedy jak chcę dodać drugi i kolejny player. Na wszystkich playerach pojawia się ten sam filmik i wszystkie playery odtwarzają go jednocześnie. Ma ktoś pomysł jak to zrobić aby każdy player odtwarzał inne video z youtuba? Poniżej wklejam mój kod: xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:background="#31333a" android:layout_height="match_parent"> <FrameLayout android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:id="@+id/youtube_howtostart1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:visibility="visible" > </FrameLayout> </RelativeLayout> Java: public class HowToStart extends Fragment { private static final String API_KEY = PlayerConfig.API_KEY; private static String vidid = "ML0KJlKsNkY"; View myView; FrameLayout frameLayout; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { myView = inflater.inflate(R.layout.fragment_howtostart, container, false); frameLayout = myView.findViewById(R.id.youtube_howtostart1); final YouTubePlayerSupportFragment youTubePlayerFragment1 = YouTubePlayerSupportFragment.newInstance(); FragmentTransaction transaction1 = getChildFragmentManager().beginTransaction(); transaction1.add(R.id.youtube_howtostart1, youTubePlayerFragment1).commit(); youTubePlayerFragment1.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { if (!wasRestored) { player.cueVideo(vidid); player.pause(); player.setFullscreenControlFlags(0); player.setShowFullscreenButton(false); } } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult error) { // YouTube error String errorMessage = error.toString(); Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show(); Log.d("errorMessage:", errorMessage); } }); return myView; } }
  3. Otóż mam takie pytanie. Mam listę i z niej itema muszę pobrać 4 danę. To spoko ja na swoją wiedzę zrobił bym to tak jak niżej: public static String a; b... listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { a = list.get(i).getOwner().getAvatarUrl(); b... } }); I potem się do tych statycznych rzeczy odwołał w fragmencie, jednak nie do końca jestem pewien czy aby na pewno jest to dobry pomysł i tak można zrobić. Jak takie rzeczy powinno się robić?
  4. Rom jest stabilny, a w obecnej fazie jest przeznaczony dla zablokowanego jak i odblokowanego bootloadera, lecz nie działa ze wszystkimi kernelami. Wersja deodexed bazująca na stocku 23.5.A.1.291 Global Firmware (D6603). Dodatkowo zawiera SuperSU 2.76 i TWRP 3.0.2 oraz dodane wsparcie dla init.d. Screeny: Linki do pobrania: ROM 4.0 OTA 4.1 ANI AUTOR ANI JA NIE PONOSIMY ODPOWIEDZIALNOŚCI ZA EWENTUALNE USZKODZENIA TELEFONU, KARTY SD. KAŻDĄ MODYFIKACJĘ WGRYWASZ NA WŁASNĄ ODPOWIEDZIALNOŚĆ!!! Instalacja: - pobrane pliki kopiujemy na kartę sd - wchodzimy w recovery TWRP - nie robimy wipe, skrypt podczas instalacji sam to wykona Zalecana czysta instalacja - przywrócenie ustawień domyślnych przed i po flashowaniu - wrzucamy paczkę z romem, potem paczkę ota - jeśli chcemy korzystać z xposed, wrzucamy najnowszą ich wersję - wipe cache and dalvik - Reboot Dodatki: Dynamicznie zmieniający się kolor paska nawigacji: Dynamic Nav-Bar 36 dpi: Dynamic Nav-Bar 42 dpi Dynamic Nav-Bar 48 dpi Statyczny kolor paska animacji (przypisany na sztywno do danego motywu): 48 dpi Nav-Bar 42 dpi Nav-Bar 36 dpi Nav-Bar Autorem moda romu jest użytkownik Dobsgw Link do xda
  5. W MainActivity mam coś takiego: DescActivity.java wygenerowany jest przez Android Studio, czyli: W activity_desc.xml mam: desc_row.xml to plik zawierający kilka TextView i Button. Jak przekazać ID z MainActivity do fragmentu "DescFragment" dodanego w activity_desc.xml do DescActivity?
  6. Witam W mojej aplikacji opartej na fragmentach dodałem toolbar i mam problem z wyswietlaniem podgladu kamery, aby to zobrazować zamieszczam screeny. Probowałem użyć setSupportedActionBar().hide(); po wejsciu w aparat, a nastepnie show(): jednak ta metoda wywala mi błąd void android.app.ActionBar.show()' on a null object reference jesli juz wychodze z kamery i chce pokazac toolbar (jeżeli nie używam metody show(), to toolbar sie chowa, jednak nadal nie widać całego podgladu kamery i jest on uciety od dołu tak jak na obrazku drugim tyle, że bez toolbara już). Jakies propozycje ?
  7. Witam wszystkich, otóż mam taki problem, że przy przesuwaniu palcem viewpager czasami dzieję się coś takiego jakby widok się zawiesił (na obrazku ten kawałek po lewej stronie). Tzn przesuwasz ale ciągle w jednym miejscu jest ucięta grafika z fragmentu, która dziwnie wygląda i nie powinno jej tam być. Dzieję się to nie na wszystkich telefonach a wręcz zauważyłem że raczej na tych słabszych. Dziwna sprawa nie miałem z tym nigdy do czynienia. Ktoś wie jak takie coś rozwiązać? Pozdrawiam.
  8. Zaimpelemntowałem interfejs umożliwiający przełączanie się między kartami według tego poradnika: http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html. To co jest na screen'ie to główna aktywność posiadająca dwie karty (czyli Tab1.xml i Tab2.xml). Klasy Tab1 oraz Tab2 są rozszerzeniem klasy Fragment. Załózmy że chcę zmienić tekst w Tab1, ten "You Are in Tab 1". Mogę to zrobić bez problemu przy wykorzystaniu funkcji onCreateView(). Jak rozumiem funkcja ta jest uruchamiana tylko raz przy tworzeniu widoku, a więc w ten sposób tekst ten mogę zmienić tylko raz na początku. Chcę zmienić tekst w "późniejszym" czasie, np. na skutek działania funkcji wewnątrz MainActivity albo z dowolnego innego miejsca. W tym celu utworzyłem sobie statyczną zmienną TextView która wskazuje na dany tekst. public class Tab1 extends Fragment { public static TextView textView; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.tab_1,container,false); textView = (TextView) view.findViewById(R.id.textView); textView.setText("Ta funkcja działa, a więc textView nie może być null"); return view; } Problem pojawia się gdy chcę się odnieść do zmiennej Tab1.textView z poziomu innej klasy, przykładowo z MainActivity: public class MainActivity extends AppCompatActivity { Toolbar toolbar; ViewPager pager; ViewPagerAdapter adapter; SlidingTabLayout tabs; CharSequence Titles[]={"Home","Events"}; int Numboftabs =2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); InitializeToolbarAndTabs(); Tab1.textView.setText("To już niestety nie działa"); } W tym momencie otrzymuję nieobsługiwany wyjątek: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference Próbowałem już kilka innych sposobów, zawsze otrzymuję NullPointerException. Nie mogę również znaleźć fragmentu funkcjami findFragmentByTag() ani findFragmentById() - też zawsze null. Nawet List<android.support.v4.app.Fragment> allFragments = getSupportFragmentManager().getFragments(); zwraca pustą listę allFragments. Wszystkie te funkcje wywoływane są wewnątrz MainActivity.
  9. Witam ponownie. Podczas pracy nad aplikacją trafiłem na ostatnią trudną rzecz, która okazała się nie do przeszkoczenia. Otóż, posiadam 2 aktywności (o nazwach FA, SA). W aktywności SA posiadam na razie 1 fragment o nazwie FF. W FA obliczam dane (wartości double), które wysyłam do SA za pomocą Intent (putExtra, getExtra). Działa to w porządku, ale teraz chciałbym pobrać dane z tego SA do fragmentu FF. Niestety nie wiem jak. Dodam tylko, że fragmentu nie mam zdefiniowanego w pliku XML. Jako, że chce poźniej zrobić tam następne fragmenty, które będą korzystały z tych samych danych, dlatego dane pierw wysyłam do aktywności SA. Czy to jest dobra praktyka? W sumie nie wiem czy jest alternatywa do tego.
  10. Witam. Mam problem z ustawieniem TabHosta, mimo skonfigurowania, wygląda tak jakby nie był skonfigurowany.(screenshot w załączniku) Ten sam kod wklejony do innego projektu działa poprawnie, jednak tutaj nie. Domyślam się że to przez NavDrawera, bo już mi przysporzył kłopotu w odnajdywaniu obiektu TabHost po id: Chciałbym aby w danym fragmencie NavDrawera wyświetlił się TabHost. import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TabHost; public class PlanLekcji extends Fragment { public PlanLekcji(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View rootView = inflater.inflate(R.layout.plan_lekcji, container, false); String[] Poniedzialek = new String[] {"PLSKIA", "PLSKIA", "PLSKIA", "UTK", "WF", "WF", "UTK", "Aplikacje Internetowe"}; String[] Wtorek = new String[] {"Matematyka", "Fizyka", "UTK", "WF", "Język Niemiecki", "Sieci Komputerowe", "MIEKOOUP", "MIEKOOUP"}; String[] Środa = new String[] {"Matematyka", "Język Polski", "Język Polski", "Systemy Operacyjne", "Sieci Komputerowe", "Język Angielski", "Programowanie", "TAIiBD"}; String[] Czwartek = new String[] {"Matematyka", "Godzina Wychowawcza", "Matematyka", "Język Angielski", "Religia", "Fizyka", "TaIiBD", ""}; String[] Piatek = new String[] {"MIEKOOUP", "MIEKOOUP", "Programowanie", "Język Polski", "HiS", "Podstawy Przedsiębiorczości", "Religia", "WDŻ"}; View myFragmentView = inflater.inflate(R.layout.plan_lekcji, container, false); TabHost tabhost = (TabHost) myFragmentView.findViewById(R.id.tabHost); if (tabhost!=null) Log.d("SYSTEM", "znaleziono tabHosta"); else Log.d("SYSTEM", "nie znaleziono tabHosta"); tabhost.setup(); //PONIEDZIALEK TabHost.TabSpec ponspecs = tabhost.newTabSpec("pon"); ponspecs.setContent(R.id.txtpon); ponspecs.setIndicator("Poniedziałek"); tabhost.addTab(ponspecs); //WTOREK TabHost.TabSpec wtspecs = tabhost.newTabSpec("wt"); wtspecs.setContent(R.id.txtwt); wtspecs.setIndicator("Wtorek"); tabhost.addTab(wtspecs); //SRODA TabHost.TabSpec srspecs = tabhost.newTabSpec("sr"); srspecs.setContent(R.id.txtsr); srspecs.setIndicator("Środa"); tabhost.addTab(srspecs); //CZWARTEK TabHost.TabSpec czwspecs = th.newTabSpec("tag4"); czwspecs.setContent(R.id.czw); czwspecs.setIndicator("Czwartek"); th.addTab(czwspecs); //PIATEK TabHost.TabSpec ptspecs = th.newTabSpec("tag5"); ptspecs.setContent(R.id.pt); ptspecs.setIndicator("Piątek"); th.addTab(ptspecs); * Log.d("KOMUNIKAT SYSTEMOWY", "Zakonczono ladowanie TabHost"); return rootView; } } plan_lekcji.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TabHost android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/tabHost" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_marginTop="130px" android:layout_height="wrap_content"></TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!--PONIEDZIALEK--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Poniedziałek" android:id="@+id/txtpon" android:layout_gravity="center_vertical" /> <!--WTOREK--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Wtorek" android:id="@+id/txtwt" android:layout_gravity="center_vertical" /> <!--SRODA--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Środa" android:id="@+id/txtsr" android:layout_gravity="center_vertical" /> <!--CZWARTEK--> <LinearLayout android:id="@+id/czw" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Czwartek" android:id="@+id/textViewCzw" android:layout_gravity="center_vertical" /> </LinearLayout> <!--PIATEK--> <LinearLayout android:id="@+id/pt" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="piątek" android:id="@+id/textViewPt" android:layout_gravity="center_vertical" /> </LinearLayout> --> </FrameLayout> </LinearLayout> </TabHost> </RelativeLayout> MainActivity.java: package info.androidhive.slidingmenu; import android.annotation.TargetApi; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.content.res.Configuration; import android.content.res.TypedArray; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import java.util.ArrayList; import info.androidhive.slidingmenu.adapter.NavDrawerListAdapter; import info.androidhive.slidingmenu.model.NavDrawerItem; public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] navMenuTitles; private TypedArray navMenuIcons; private ArrayList<NavDrawerItem> navDrawerItems; private NavDrawerListAdapter adapter; @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); navMenuIcons = getResources() .obtainTypedArray(R.array.nav_drawer_icons); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.list_slidermenu); navDrawerItems = new ArrayList<NavDrawerItem>(); navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "4")); navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1))); navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "1")); navMenuIcons.recycle(); mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); adapter = new NavDrawerListAdapter(getApplicationContext(), navDrawerItems); mDrawerList.setAdapter(adapter); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.app_name, R.string.app_name ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { displayView(0); } } /* * * *Slider menu * */ private class SlideMenuClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { displayView(position); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.action_settings: return true; default: return super.onOptionsItemSelected(item); } } @Override public boolean onPrepareOptionsMenu(Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_settings).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } private void displayView(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new PlanLekcji(); break; case 1: fragment = new Oceny(); break; case 2: fragment = new ZadaniaDomowe(); break; case 3: fragment = new Sprawdziany(); break; case 4: fragment = new Informacje(); break; case 5: fragment = new Oplaty(); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).commit(); mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(navMenuTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { Log.e("MainActivity", "Error in creating fragment"); } } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } } Przy okazji, chciałbym się dowiedzieć, czy jest jakiś sposób na sprawdzenie czy pojedyncza instrukcja została pomyślnie wykonana? Byłbym bardzo wdzięczny gdyby ktoś mi podpowiedział co zrobić aby aplikacja zadziałała prawidłowo.
  11. Jestem w trakcie pisania aktualizacji do mojej aplikacji. Z założenia plan jest prosty, aplikacja ma się składać z trzech zakładek Strona Główna, Najwyzej oceniane, Ostatnio dodane. Te dwie ostatnie zakładki pobieraja w AsyncTask za pomoca JSON dane z bazydanych i wrzucaja je do ListView. Zaraz po uruchomieniu aplikacji wszystko jest spoko, ale gdy pobierzemy pare danych, choreographer wyrzuca cały czas komunikat: the application may be doing too much work on its main thread. Pierwsza classa w ktorej tworze Fragmenty itd. StronaGlowna.class NajwyzejOceniane.class EndlessScrollListener.class TopListZapytania.class EndlessScrollListener uruchamia classe z zapytaniem gdy przesuniemy liste do konca, TopListZapytania doczytuje kolejne dane w AsyncTask i nie wiem czymu aplikacja się czepia że głowny wątek ma za dużo roboty.. :/ Po pojawieniu się tego komunikatu znikają mi wszystkie views z Strona Głowna i Ostatnio dodane. Dlaczego znikaja akurat z tych dwóch już doszedłem do tego. Spowodowane to jest tym ze gdy glowny watek juz ma za duzo roboty to nie wykonuje onCreateView dla StronaGlowna i Ostatnio dodane, dlatego pozostaja one puste..:/ Macie moze jakies pomysly jak rozwiazac ten problem? Tak powinna wygladac aplikacja caly czas: A tak wyglada po przesunieciu którejś z list w dół: Instalka do aplikacji, jeśli ktoś chciałby zobaczyć jak to wygląda w praktyce: MojePrzepisyV2.apk
  12. Mam następujący problem. Mam Activity, które posiada swoje ActionBar. W metodzie onCreate wypełniam programistycznie actionbara w ten sposób: protected void onCreate(Bundle savedInstanceState) { //...some other things ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); Tab tab = bar.newTab().setText(R.string.tab_sites).setTabListener( new TabListener<CategoriesFragment>(activity,"tag1",CategoriesFragment.class)); bar.addTab(tab); tab = bar.newTab().setText(R.string.tab_offline).setTabListener( new TabListener<OfflineFragment>(activity,"tag2", OfflineFragment.class)); bar.addTab(tab); } CategoriesFragment to ListFragment, nie posiada żadnego xml’a związanego z layoutem. OfflineFragment to Fragment, który buduje swój widok na podstawie xml’a z layoutem (tzn, inflater.inflate(...)) TabListener, z którego korzystam, wygląda tak: public class TabListener<T extends Fragment> implements android.app.ActionBar.TabListener { public MyFragmentListener(Activity activity, String tag, Class<T> tClass) { this(activity, tag, tClass, null); } public MyFragmentListener(Activity activity, String tag, Class<T> tClass, Bundle bundle) { this.activity = activity; this.tag = tag; this.tClass = tClass; this.bundle = bundle; fragment = activity.getFragmentManager().findFragmentByTag(tag); if(fragment != null && !fragment.isDetached()){ FragmentTransaction fragmentTransaction = activity.getFragmentManager().beginTransaction(); fragmentTransaction.detach(fragment); fragmentTransaction.commit(); } } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(fragment == null){ fragment = Fragment.instantiate(activity, tClass.getName(),bundle); ft.add(android.R.id.content,fragment, tag); } else{ ft.attach(fragment); } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { if(fragment != null){ ft.detach(fragment); } } } Próbuję to odpalić i przetestować. Kiedy Activity startuje, widzę obie taby, które wyglądają tak jak ja chcę: Tutaj jest pierwszy tab: pierwszy tab Tutaj jest drugi tab: drugi tab Kiedy chcę wybrać fragment z listy na pierwszym tabie, chcę zpushować nowy ListFragment w taki oto sposób: public void onListItemClick(ListView l, View v, int position, long id) { Bundle bundle = new Bundle(); bundle.putString("chosen", category[position]); Fragment fragment = new SubcategoryFragment(); fragment.setArguments(bundle); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(getId(), fragment); fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); fragmentTransaction.addToBackStack("category_to_subcategory"); fragmentTransaction.commit(); } Po wybraniu jakiegoś elementu, taby wyglądają tak: Pierwszy tab: pierwszy tab , czyli tak jak ja chcę, wszystko ok Drugi tab: drugi tab , no i widać problem - z jakiegoś powodu ta lista z pierwszego taba ‘pojawiła się’ w drugim tabie. Jeżeli próbuję wcisnąć ‘powrót’ w pierwszym tabie po pojawieniu się nowej listy, powraca do poprzedniej, czyli tak jak ja chcę. Jeżeli po wybraniu jakiegoś elementu z listy, pojawieniu się nowego listfragmentu, przejdę do drugiego taba, i tam wcisnę powrót, lista z pierwszego taba kompletnie znika: imgur: the simple image sharer Jeżeli po wybraniu jakiegoś elementu z listy, pojawieniu się nowego listfragmentu, przejdę do drugiego taba, przejdę z powrotem do 1go taba, i tam wcisnę powrót, program się wysypuje, a powodem jest: 06-15 20:11:12.151: E/AndroidRuntime(18971): java.lang.IllegalStateException: Fragment already added: CategoriesFragment{414d9350 #0 id=0x1020002 fanfictionnet_categories} Jak widać, coś robię źle. Co dokładniej?
  13. konar_

    Problem z klasą Fragment

    Przy odtwarzaniu załadowany obraz się pokrywa zamiast dokonać zamiany. Czy idzie to rozwiązać w jakiś inny sposób bo już mi nerwy siadają > Chodzi mi o to aby utworzyć menu składające się z 4 rożnych aktywności. gdzie są one konstruowane dynamicznie z rożnych plików z folderu layout. Z góry dziękuję. importowana bibliotekę android-support-v4.jar aby program uruchamiał się w android 2.1 FragmentExampleActivity.java package com.my; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; public class FragmentExampleActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); stackAFragment(3); stackAFragment(1); stackAFragment(3); } private void stackAFragment(int nAndroids) { Fragment f3 = new Fragment3(nAndroids); FragmentTransaction ft3 = getSupportFragmentManager().beginTransaction(); ft3.replace(R.id.the_frag3, f3); ft3.commit(); } } Fragment3.java package com.my; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment3 extends Fragment { private int nAndroidsL; public Fragment3() { } public Fragment3(int nAndroids) { this.nAndroidsL = nAndroids; } public void onCreate(Bundle saved) { super.onCreate(saved); if (null != saved) { nAndroidsL = saved.getInt("nAndroidsL"); } } public void onSaveInstanceState(Bundle toSave) { toSave.putInt("nAndroidsL", nAndroidsL); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) { if(nAndroidsL == 0) return inflater.inflate(R.layout.my_layout, container, false); else return inflater.inflate(R.layout.my_layout2, container, false); } } main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment class="com.my.Fragment3" android:id="@+id/the_frag3" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout> my_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="aaaa"/> </LinearLayout> my_layout2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="xxxx"/> </LinearLayout>
  14. Od dłuższego czasu krążyły plotki o możliwym przejęciu HTC przez Google. Jeszcze wczoraj w zasadzie żegnaliśmy się z marką, jednak dzisiejsze informacje okazały się sporym zaskoczeniem. HTC na części Google nie kupiło ani całego HTC, ani choćby działu mobilnego. Zamiast tego wykupiono część pracowników zajmujących się pracami nad Pixelami. Oznacza to, że od tej pory […] HTC nie zniknie, Google wykupiło tylko fragment działu mobilnego Przeczytaj cały artykuł
x