Okhelp.cz

Recepty, články, nápady, programování. Dříve dum-zahrada, finance, internet a know-how.okhelp.cz Pro lepší výsledky hledání používejte i diakritiku.

2. Fragments Tutorial MainActivity - Czech language


AD MOB

Díl 2.
V prvním dile jsme se něco dozvěděli od XML souborech


a taky jaké označení procesoru pro rok 2016 - Intel® VT-x, Intel® EM64T - musí mít PC pro programování v Android Studiu, tedy hlavně pro spuštění emulátoru - virtuálního telefonu, tabletu atd. jinak nebudete moci testovat aplikace na nejnovějších zařízeních, které tento emulátor umí napodobit.
Dole na stránce odkazu je uvedena minimální konfigurace PC, ale protože Android je již plnokrevný OS, který se neustále rozrůstá, tak tyto hodnoty jsou prakticky nedostatečné a je třeba osadit PC nejnovějšími komponentami.



Používáme příklad i zip porojekt z https://developer.android.com/training/basics/fragments/creating.html

V tomto díle si rozebereme záludnosti v souboru MainActivity.java.

// název balíčku
package com.example.android.fragments;

import android.os.Bundle;
// knihovny nutné pro spuštění na starších zařízeních s verzí Androidu API 4
// API verze a příslušné číslo verze Androidu jsou zde 
// https://cs.wikipedia.org/wiki/Historie_verz%C3%AD_Android
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;

// HeadlinesFragment je třída se seznamem položek, která díky
// OnHeadlineSelectedListener bude vracet události kliknutí na položku
// Pokud při pokusech přídáme jiný soubor se seznamem, je nutno změnit i název HeadlinesFragment 
// na nový název, jinak nic neodchytíme!!!!
public class MainActivity extends FragmentActivity 
        implements HeadlinesFragment.OnHeadlineSelectedListener {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		// tady se rozhoduje zda si vezme XML pro  malé obrazovky, jen s jedním panelem, nebo 
        // velké se dvěma panely
		// Rozhoduje si o tom systém sám, ale můžeme to ovlivnit a pdstrčit mu 
		// i dvoupanel pro testování - viz předchozí díl //android.okhelp.cz/1-fragments-tutorial-xml-czech-language/
        setContentView(R.layout.news_articles);
		//// VELKE OBRAZOVKY - layout-large - dual panel /////////
		// pokud si systém vybere news_articles.xml z layout-large (dual panel)
		// budou fragmenty automaticky naloděny do tagů fragment, kde jsou 
		// uvedeny absolutní cesty fragmentů!!!! 
		// např. fragment android:name="com.example.android.fragments.HeadlinesFragment"
		// si nalodí sám fragment s linkami - položkami ListView.
		// Podobně se sám obslouží při nalodění i fragment s obsahem
		// fragment android:name="com.example.android.fragments.ArticleFragment"
		// Tyto tagy fragment, s absolutní cestou k fragmentu, 
                // neumožňují výměnu fragmentu za běhu aplikace!!!!!
		// Dynamickou výměnu fragmenut však umožňují kontejnery tagu FrameLayout

 
		//// MALE OBRAZOVKY - jen jeden fragment //////
		// Zkontrolujeme, který XML byl naloděn, pokud je activováno R.id.fragment_container
		// značí to, že byl vybrán XML ze složky layout, kde je pouze jeden panel a do něj
		// vložíme pouze fragment se seznamem, tedy HeadlinesFragment a pak po vybrání položky 
		// v něm otevřeme ArticleFragment.java s vypsáním obsahu článku atd.
        if (findViewById(R.id.fragment_container) != null) {
		    
			// Pokud obnovujeme seznam položek vrácením se z předchozího stavu - fragmentu
            // pak nepotřebujeme nic dělat a měl bychom opustit tento if, jinak
            // dojde překrývání fragmentů, tedy uvídíme překryv textů a dalších elementů původního
			// fragmentu fragmentem novým proto uděláme podmínku:
            if (savedInstanceState != null) {
                return;
            }

            // vytvoříme instanci HeadlinesFragment s položkami seznamu v ListView
            HeadlinesFragment firstFragment = new HeadlinesFragment();


			// pokud chceme vložit speciální instrukce pro start odebrané z nějakého Intent,
			// odchytíme je zde a vložíme je jako argumenty. Pak je při startu fragmentu
			// možno odchytit v onCreate()
            firstFragment.setArguments(getIntent().getExtras());

			// vložíme fragment do fragment_container FrameLayout-u  
			// který umožňuje výměnu fragmentů
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, firstFragment).commit();
        }
    }

	// uživatel klikl na nějakou položku ze seznamu v HeadlinesFragment!
    public void onArticleSelected(int position) {
       

        // vybereme určitý článek dle pozice položky vybrané v seznamu ListView
		// Provedeme kontrolu jestli je naloděn dual panel, nebo jen jednoduchý
        ArticleFragment articleFrag = (ArticleFragment)
                getSupportFragmentManager().findFragmentById(R.id.article_fragment);
		
        if (articleFrag != null) {
			// VELKÉ OBRAZOVKY
            // protože je aktivní id R.id.article_fragment z news_articles.xml v layout-large složce
			// víme, že aplikace používá dual-panel, dva fragmenty vedle sebe

            
			// zde se volá funkce která je obsažena v třídě v souboru ArticleFragment.java
			// a provede patřičné příkazy, v našem případě se 
                        // vypíše obsah článku z třídy Ipsum.java
			// sloužící jako úložiště textů přiřazených k jednotlivým
                        // pozicím -  položkám seznamu ListView
            articleFrag.updateArticleView(position);

        } else {
			// MALÉ OBRAZOVKY
			// jen JEDEN-PANEL se zobrazuje - vybrán soubor news_articles.xml v layout složce
			// musíme vyměnit fragemnty !!!!

            
			// Vytvoříme fragment a doplníme argumenty - hodnoty, poslané např. z HeadlinesFragment.java
			// jedná se nám především o pozici položky, na kterou bylo kliknuto v ListView
			// tato pozice bude určující pro výběr obsahu pro ArticleFragment
            ArticleFragment newFragment = new ArticleFragment();
            Bundle args = new Bundle();
            args.putInt(ArticleFragment.ARG_POSITION, position);
            newFragment.setArguments(args);
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

 			// Zde vyměníme původní fragment HeadlinesFragment novým fragmentem s obsahem článku atd.
			// Můžeme vyměnit fragment za jiný, protože id fragment_container v layout/news_articles.xml je tagu FrameLayout
            transaction.replace(R.id.fragment_container, newFragment);
			// addToBackStack umožní uživateli vrátit se zpět na seznam položek v HeadlinesFragment.java
            transaction.addToBackStack(null);

            
			// celou transakci předáme ke schválení :)
            transaction.commit();
        }
    }
}

397LW NO topic_id




AD

Další témata ....(Topics)


96

onSaveInstanceState() onRestoreInstanceState() basic Android example | onsaveinstancestate-onrestoreinstancestate-basic-android-example



public class MyClass extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       }
	 String sMyText = "some text";
	 int nMyInt = 10;

 @Override
 protected void onSaveInstanceState(Bundle outState) {
     // Save away the original text, so we still have it if the activity
     // needs to be killed while paused.
     outState.putString("my_text", sMyText);
     outState.putInt("my_int", nMyInt);
     Toast.makeText(this, "onSaveInstanceState()", Toast.LENGTH_LONG).show();
Log.i("onSaveInstanceState", "onSaveInstanceState()");
}
 String sNewMyText = "";
 int nNewMyInt = 0;
 
 @Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
     super.onRestoreInstanceState(savedInstanceState);
     // restore saved values
     sNewMyText = savedInstanceState.getString("my_text");
     nNewMyInt = savedInstanceState.getInt("my_int");
     Toast.makeText(this, "onRestoreInstanceState()", Toast.LENGTH_LONG).show();
     Log.i("onRestoreInstanceState", "onRestoreInstanceState()");
     
 }
}
49

Emulator window was out of view and was recentred - Android emulator warning | emulator-window-was-out-of-view-and-was-recentred-android-emulator-warning


Emulator window was out of view and was recentred
Emulator] WARNING: Data partition already in use. Changes will not persist!
Emulator] WARNING: SD Card image already in use: C:\Documents and Settings\user_name\.android\avd\hvga21_up1_7.avd/sdcard.img
Emulator] WARNING: Cache partition already in use. Changes will not persist!

Basic step
Try restart Eclipse if using from menu File->Restart

Other solutions

Solution 1: try restart ADB server
//android.okhelp.cz/how-quickly-restart-adb-exe-adb-server-android-emulator-example/


Solution 2:

Delete Run Configuration


//android.okhelp.cz/android-emulator-wont-run-application-started-from-eclipse/





Solution 3:
Try delete:

c:\Documents and Settings\user_name\.android\avd\my_avd.avd\cache.img
c:\Documents and Settings\user_name\.android\avd\my_avd.avd\userdata-qemu.img



Try solution 4:
Eclipse menu select Window->Preferences->Android

Windows 32

FROM: C:\Program Files\Android\android-sdk
TO: C:\PROGRA~1\Android\android-sdk

Windows 64

FROM: C:\Program Files (x86)\Android\android-sdk
TO: C:\PROGRA~2\Android\android-sdk
316

Ad baner without GoogleAdMobAdsSdkAndroid-6.4.1 Android example | ad-baner-without-googleadmobadssdkandroid-6-4-1-android-example


First: AdView is in XML file

<com.google.android.gms.ads.AdView
    xmlns:ads="//schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adUnitId="MY_AD_UNIT_ID"
    ads:adSize="BANNER"/>

// onResume
AdView adView = (AdView)this.findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
    .addTestDevice("TEST_DEVICE_ID")
    .build();
adView.loadAd(adRequest);




Second: Using AdView in Fragment with LinearLayout
Resolve error in ADT Graphical layout editor:
The following classes could not be instantiated:
- com.google.android.gms.ads.AdView

// layout in xml file
    <LinearLayout
        android:id="@+id/layout"
              android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

// java class with fragment in Fragment class or in Activity class
private static AdView adView;
        @Override
		public void onResume(){  
                super.onResume();
                 try {
                	 // in xml is empty layout
					adView = new AdView(getActivity());
					adView.setAdUnitId("ca-app-pub-626/638103xxxxxxx");
					adView.setAdSize(AdSize.BANNER);  
					
                	                LinearLayout layout = (LinearLayout)getView() .findViewById(R.id.layout);
					layout.addView(adView);
					
					AdRequest adRequest = new AdRequest.Builder().build();   
					adView.loadAd(adRequest);

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        }


More about:
https://developers.google.com/mobile-ads-sdk/docs/admob/android/play-migration?hl=it
340

Android Studio hide delete import module | android-studio-hide-delete-import-module


Hide module - open dialog: File > Project Structure Ctrl + Alt + Shift + S
android-studio-hide-module.jpg

Hide module: in opened Dialog select module which will hidden and click on minus (left upper corner)

android-studio-hide-module-from-project-explorer.jpg

If module is hidden, you can permanetly delete module from disk. But if you want using module in future,  copy module into other folder (not into AndroidProjects folder and his subbfolders) and delete module permanetly from project and disc. Right mouse click on module and select from menu Delete.
android-studio-delete-module-from-disc.jpg

If you want import the backup copy to project, use: File>New>Import mudule
android-studio-import-module.jpg
187

NoClassDefFoundError: com.google.ads.AdView ADT 17 | noclassdeffounderror-com-google-ads-adview-adt-17


Eclipse update ADT 17 Android Emulator error: E/AndroidRuntime(370): java.lang.NoClassDefFoundError: com.google.ads.AdView

Solution:
-right click on the project in project tree and select Project properties
-select Java Build Path
-select TAB Order and Export
-check GoogleAdMobAdsSdk-4.0.4.jar (or your version SDK)
-press OK
-clean project by menu Project -> Clean
-rebuild project (Project - Build Automatically)

How add GoogleAdMobAdsSdk....jar to project:
-right click on the project in project tree and select Project properties
-select Java Build Path
-select TAB Libraries
-press the button Add External JARs...
-select your version GoogleAdMobAdsSdkXXX.jar what you can using
-OK
-OK
-clean project
-rebuild project


menu-item-project-properties-eclipse
order-and-export-eclipse dialogue
eclipse-add-jar-library-to-project


Editace: 2016-06-28 14:36:04
Počet článků v kategorii: 397
Url:2-fragments-tutorial-mainactivity-czech-language

AD
11 Share
Share
Tweet