1,096 views

3. Fragments Tutorial HeadlinesFragment – Czech language

Dil 3. HeadlinesFragment.java
V 1. dílu jsme se něco dozvěděli od XML souborech
V 2. dílu jsme rozebrali MainActivity.java

V tomto dílu si rozebereme záludnosti v HeadlinesFragment.java souboru.
Používáme příklad i zip porojekt z https://developer.android.com/training/basics/fragments/creating.html Pozorně si jej nastudujte.

package com.example.android.fragments;
 
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
// pokud chceme aby byla aplikace spustitelná i v nižších verzích Androidu
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
// extends ListFragment důležité pro základní obsluhu ListView atd.
public class HeadlinesFragment extends ListFragment {
	// zajistí zpětné odesílání zprav - zde zachytí kliknutí uživatele na položku
        // v ListView - seznamu položek 
    OnHeadlineSelectedListener mCallback;
 
    // pro odposlouchávání zpráv v ListView a odesílání do MainActivity.java
    public interface OnHeadlineSelectedListener {
        /**
		funkce je volána onArticleSelected z HeadlinesFragment když uživatel
                klikne na item v ListView - položku seznamu -
		Tělo funkce je v MainActivity!!! Tam proběhnou potřebné úkony.
                Například výměna fragmentů atd. */
        public void onArticleSelected(int position);
    }
 
	/** Protože je HeadlinesFragment rozšířením (extends) ListFragment
	používá funkci onCreate(). 
        ArticleFragment extends Fragment bude používat onCreateView() 
	*/
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
 
		// Zde si pohlídáme verze Androidu a přiřadíme jim 
                // předdefinovanou šablonu XML souboru
		// Je to důležité pokud chceme využívat více možností, 
                // které nové verze nabízejí 
		// například podbarvení vybrané položky seznamu
        int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
                android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
 
 
		// zde se vytovoří jednotlivé položky seznamu v ListView
		// Pole vypadá takto:  
		// static String[] Headlines = {"Article One","Article Two"};
		// položky tedy ponesou názvy ze String[] Headlines
		// Teoreticky si menší pole položek můžete dát i sem pro jednodušší editaci
        setListAdapter(new ArrayAdapter<String>(getActivity(), layout, Ipsum.Headlines));
    }
 
    @Override
    public void onStart() {
        super.onStart();
 
 
		// Pokud se bude zobrazovat dual-panel 
                // (pro tablety, větší obrazovky) 
                // například je dobré
		// když bude zvýrazněna vybraná položka setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		// Toto provádíme v onStart(), kdy máme přístup k listview
        if (getFragmentManager().findFragmentById(R.id.article_fragment) != null) {
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        }
    }
 
	// onAttach() bude asi deprecated, tak můžete vyzkoušet
	/* 
			@Override
		public void onAttach(Context context) {
			super.onAttach(context);
 
			Activity a;
 
			if (context instanceof Activity){
				a=(Activity) context;
			}
		}
	*/
// nebo pohledat něco na inetu 
 
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
 
 
		// Zde přiřadíme odposlouchávání zprávy kliknutí na položku ListView 
		// a zpětnou vazbu s MainActivity.
		// Pokud se to nepodaří, bude zaznamenáno a předáno dál chybové hlášení
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }
    /** kliknuto na položku ListView */
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
                // long id se bude hodit například při obsluze sql.databází
 
		// Upozorní - předá zprávu MainActivity.java, že uživatel 
		// klikl na položku a odešle i pozici v seznamu
                mCallback.onArticleSelected(position);
 
 
		// getListView().setItemChecked(position, true); 
		// má zajistit podbarvení 
		// - zvýraznění vybrané položky,
		// ale mi to nefungovalo, tak jsem ještě znovu přidal,
		// které je už v onStart() a už to funguje jak má
		// Možná nějaká záludnost v mém telefonu :(
		getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
 
        getListView().setItemChecked(position, true);
    }
}
Posted in Fragments Tutorial | Tagged , , | Comments Off on 3. Fragments Tutorial HeadlinesFragment – Czech language
913 views

2. Fragments Tutorial MainActivity – Czech language

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 http://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();
        }
    }
}
Posted in Fragments Tutorial | Tagged , | Comments Off on 2. Fragments Tutorial MainActivity – Czech language
847 views

1. Fragments Tutorial XML – czech language

Tutoriál je pro naprosté začátečníky s fragmenty, machři se nic nového nedozvědí.
Tutoriál se bude zabývat upozorněním na některé záludnosti v příkladu, jenž si pozorně pročtěte, a
který si můžete otevřít a stáhnout zde:
https://developer.android.com/training/basics/fragments/creating.html
Je tam i zip soubor, který si stáhněte a otevřete v Android Studiu (JetBrains IntelliJ IDEA software),
či jiném IDE, které používáte k programování.

Important: Protože Android Studio má celkem dost značné nároky na PC, zejména na rychlost a budete si chtít pořídit nové PC, je třeba s procesorem Intel a nekupovat repas, ale vše v novotě. Doporučované minimum je nedostatečné a práce na takovém PC je horor. Dole na stránce odkazu je uveden typ procesoru, který by mělo PC mít, jinak na něm nespustíte, nebo jen s obtížemi, emulátor, na kterém se testují vytvářené aplikace.
Například pro rok 2016 jsou požadavky na procesor:
For accelerated emulator: 64-bit operating system and Intel® processor with support for Intel® VT-x, Intel® EM64T (Intel® 64), and Execute Disable (XD) Bit functionality

Začneme soubory XML
V příkladu jsou v res složce dvě složky layout.
layout – pro obrazovky chytrých telefonů a
layout-large – pro obrazovky tabletů a větších obrazovek

V složce layout jsou dva soubory.
article_view.xml je v tomto případě vždy využíván fragmentem ArticleFragment.java, který zobrazuje obsah. Je jedno jaká bude velikost obrazovky, protože si jej otevírá ArticleFragment.java sám.

Obě složky obsahují soubor stejného názvu news_articles.xml – který obsahuje kontejner buď jen pro jeden panel (layout složka),
nebo pro dva panely (layout-large složka) pro velké obrazovky.

Important:
Složku layout-large lze přejmenovat na swXXXdp např. sw600dp a pak si zařízení bere automaticky resource z této složky, pokud nejmenší rozměr obrazovky je roven, či větší 600dp.
To lze využít k oklamání zařízení při testování. Pokud máte jen malý telefon a chcete na něm zkoušet dva panely, tak složku přejmenujte, po dobu testování, např. na sw300dp a pak i malé zařízení zobrazí oba panely. Po ukončení testování je třeba zase složku přejmenovat na původní nejmenší přípustnou šířku zařízení (w600dp), nebo nejmenší rozměr jedné ze stran obrazovky (sw600dp).

news_articles.xml v layout složce obsahuje jen FrameLayout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Important: U tohoto kontaineru -FrameLayout- je možno měnit obsah, tedy dynamicky vyměnit fragment za jiný! Toho využívá aplikace u malých obrazovek pro zobrazení jak seznamu, tak i dalšího obsahu po kliknutí na položku v ListView – seznamu.
U fragment kontaineru s natvrdo přiřazeným fragmentem dynamická výměna za běhu programu není možná (viz níže dva kontainery tagu fragment)!!!

news_articles.xml v layout-large složce obsahuje dva kontainery tagu fragment s plnou cestou k souboru např. com.example.android.fragments.HeadlinesFragment,
u kterých není možná dynamická výměna fragmentu!!!!

Important: Pokud chcete měnit fragmenty v některém kontaineru, je třeba použít FrameLayout kontainer!!!!

    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />
 
    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

Important: Na co si ještě dát pozor!!!!
Na android:layout_width=”0dp” – musí být 0dp, jinak se např. některý panel nezobrazí, nebo neuvídíte vůbec nic.
Podobně i android:layout_weight=”1″ u prvního panelu android
android:layout_weight=”2″ u panelu druhého!!!!!

Posted in Fragments Tutorial | Tagged | Comments Off on 1. Fragments Tutorial XML – czech language
1,063 views

Cross road – Game for Android Download

Crossroad – Determine the order of passing the crossroads (Right-hand traffic, Right-of-way system).
Thick line indicates the main road.
The lines have same thickness – not the main road in crossroad.

Wikipedia:
Priority to the right is a right-of-way system, in which a driver of a vehicle is required to give way to vehicles approaching from the right at intersections. The system is stipulated in Article 18.4.a of the Vienna Convention on Road Traffic for countries where traffic keeps to the right and applies to all intersections where it is not overridden by priority signs (uncontrolled intersections), including side roads and roundabouts (but not paths or earth-tracks).
The system is widely used in countries with right-hand traffic, including most European countries.
Source: https://en.wikipedia.org/wiki/Priority_to_the_right

Download

Download Cross road from play.google.com

 

křižovatky testy autoškola pravidla pravé ruky

Posted in Android Software Download, Smartphone | Tagged , | Comments Off on Cross road – Game for Android Download
861 views

Křižovatky testy pro Android

Hra, na které si nacvičíte pořadí projíždění základními typy křižovatek.

Download

Download křižovatky testy z play.google.com

křižovatky testy autoškola pravidla pravé ruky

Posted in Android Software Download, Smartphone | Tagged , | Comments Off on Křižovatky testy pro Android
859 views

ListView set the item as checked to be highlighted

Important: Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB

int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.layout.simple_list_item_activated_1 :
android.R.layout.simple_list_item_1;

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setItemChecked(position, true);

Example of usage:

 
public void updateList() {
		Context ctx = getActivity();
		Notes notes = new Notes(ctx);
 
		String[] from = { Notes.COLUMN_TITLE };
		int[] to = { android.R.id.text1 };
		int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
				android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
		ListAdapter adapter = new SimpleCursorAdapter(ctx,
				layout, notes.getNotes(), from,
				to, 0);
 
		setListAdapter(adapter);
 
		notes.close();
	}
 
/..................
@Override
    public void onListItemClick(ListView l, View v, int position, long id) {
 
        // Set the item as checked to be highlighted when in two-pane layout
        getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        getListView().setItemChecked(position, true);
 
    }
Posted in Android Examples Code | Tagged , | Comments Off on ListView set the item as checked to be highlighted
1,279 views

FrameLayout fragment not visible Android

ListFragment show only one item issue

Try to change layout_width to 0dp

   <fragment android:name="cz.okhelp.android.fragchangfromlist.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />
<!--todo LAYOUT_WIDTH have to be 0dp !!!!!!!!!!!!!!!!!!!!! -->
 
    <FrameLayout android:id="@+id/article_fragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />
Posted in Android Studio, Bugs, warnings, errors | Comments Off on FrameLayout fragment not visible Android
1,369 views

NumberFormatException Color value drawable must start with

NumberFormatException Color value drawable must start with
NumberFormatException: Color value ‘@drawable/my_picture’ must start with #

Check all colors tags if value start with#
Read this
and check path c:\Users\me\AndroidStudioProjects\myProject\myModule\build\intermediates\res\merged\debug\ values folder for corupted values or delete ALL values folders or ALL folder in debug directory
Check folders in included modules
and rebuild project

Posted in Android Studio, Bugs, warnings, errors | Tagged , | Comments Off on NumberFormatException Color value drawable must start with
1,487 views

Android Studio failed to convert drawable into a drawable

Try this:
– check names of drawables (file name must contain only abc…xyz 012…789 _ . in Resources folder ,
names have to start with lower case
MyImage.jpg == problem ,
names with space
my image.jpg == problem,
names with –
my-image.png == problem)
– check duplicate names with other extension ( my_image.jpg – my_image.png makes the problem)
– restart Android Studio
– if problem persist:
– check c:\Users\me\AndroidStudioProjects\myProject\myModule\build\intermediates\res\merged\debug\ drawable folder for corupted names or delete ALL drawable folders
synk projekt, rebuild projekt
– if problem persist:
– restart Android Studio, wait for complete closure of the Android Studio!

Posted in Android Studio, Bugs, warnings, errors | Tagged , | Comments Off on Android Studio failed to convert drawable into a drawable
1,189 views

ClassCastException fragments.MainActivity must implement OnHeadlineSelectedListener

Problem:
You have two class with similar names HeadLinesFragment and HeadMyLinesFragment with OnHeadlineSelectedListener.
Check if call correct class in MainActivity.
For example if use HeadMyLinesFragment change implement to HeadMyLinesFragment too!

public class MainActivity extends FragmentActivity 
        implements HeadLinesFragment.OnHeadlineSelectedListener { 
// wrong implements you need correct class name 
//implements  HeadMyLinesFragment.OnHeadlineSelectedListener
//............
HeadMyLinesFragment firstFragment = new HeadMyLinesFragment(); // because in code using HeadMyLinesFragment
Posted in Android Examples Code, Bugs, warnings, errors | Tagged | Comments Off on ClassCastException fragments.MainActivity must implement OnHeadlineSelectedListener
1,189 views