Datu pārsūtīšana starp darbību un pakalpojumu. Saziņa starp darbību un pakalpojumu

Lietojumprogramma ne vienmēr sastāv no viena ekrāna. Piemēram, mēs esam izveidojuši ļoti noderīga programma un lietotājs vēlas zināt, kas ir autors. Viņš noklikšķina uz pogas “Par” un nonāk jaunā ekrānā, kurā ir noderīga informācija par programmas versiju, autoru, vietnes adresi, cik daudz kaķu ir autoram utt. Padomājiet par darbības ekrānu kā tīmekļa lapu ar saiti uz citu lapu. Ja paskatās uz kodu failā MainActivity.java no iepriekšējām nodarbībām jūs redzēsiet, ka mūsu klase Galvenā darbība attiecas arī uz Aktivitāte(vai viņa mantinieki) vai, pareizāk sakot, ir mantots no viņa.

Publiskā klase MainActivity paplašina AppCompatActivity

Kā jūs varētu nojaust, mums vajadzētu izveidot jaunu klasi, kas varētu izskatīties Galvenā darbība un pēc tam kaut kā pārslēdzieties uz to, noklikšķinot uz pogas.

Eksperimentam mēs ņemsim programmu no pirmās nodarbības un izmantosim pogu eksperimentiem (vai izveidosim jauns projekts ar vienu pogu uz ekrāna). Tālāk veidosim jauna forma parādīt noderīga informācija. Piemēram, parādīsim lietotājam, ko kaķis dara, kad tas iet pa kreisi un pa labi. Piekrītu, tas ir ļoti svarīga informācija, kas dod atslēgu Visuma atšķetināšanai.

Jaunu aktivitāti veidosim manuāli, lai gan studijai ir gatavas veidnes. Taču nav nekā sarežģīta un labākai izpratnei lietderīgi visu darīt ar rokām.

Izveidosim jaunu XML iezīmēšanas failu activity_about.xml mapē res / izkārtojums. Ar peles labo pogu noklikšķiniet uz mapes izkārtojumu un izvēlieties kādu no konteksta izvēlne Jauns | Izkārtojuma resursa fails. Parādīsies dialoglodziņš. Pirmajā laukā ievadiet faila nosaukumu aktivitāte_par. Otrajā ir jāievada saknes elements. Pēc noklusējuma tas ir tur Ierobežojuma izkārtojums. Izdzēsiet tekstu un ievadiet ritināšanas skats. Pietiek ar dažu rakstzīmju ievadīšanu, lai studija varētu ieteikt gatavas opcijas, jūs varat nekavējoties nospiest Enter, negaidot pilnu vārda ievadi:

Mēs iegūstam atbilstošo sagatavi, kurā ievietojam elementu teksta skats.

Informācija tiks izgūta no resursiem, proti, no virknes resursa par_tekstu. Tagad tas ir iezīmēts sarkanā krāsā, norādot uz informācijas trūkumu. varētu nospiest Alt+Enter un ievadiet tekstu dialoglodziņā. Bet mūsu piemērā šī metode nedarbosies, jo mūsu teksts būs vairāku rindiņu, izmantojot vadības rakstzīmes. Tāpēc darīsim savādāk. Atvērsim failu res/values/strings.xml un manuāli ievadiet šādu tekstu:

Zaļš ozols netālu no jūras krasta;\n Zelta ķēde uz šī ozola:\n Diena un nakts zinātnieks kaķis\n Viss iet apkārt ķēdei;\n Tas iet taisnība- dziesma ieslēdzas,\n Pa kreisi- stāsta pasaku.

Mēs izmantojām vienkāršākos HTML teksta formatēšanas tagus, piemēram, , , . Mūsu piemēram, pietiek ar treknrakstu vārdus, kas attiecas uz kaķi un kustības virzienu. Lai tulkotu tekstu uz jauna līnija izmantot simbolus \n. Pievienosim vēl vienu virknes resursu jaunā ekrāna nosaukumam:

Par programmu

Saprotams ar uzcenojumu. Tālāk jums ir jāizveido loga klase AboutActivity.java. Izvēlieties no izvēlnes fails | Jauns | Java klase un aizpildiet nepieciešamos laukus. Sākumā pietiek norādīt tikai nosaukumu. Pēc tam nodarbojies ar citām jomām.

Sāksim sagatavošanos.

Tagad klase ir gandrīz tukša. Pievienosim kodu manuāli. Klasei ir jāmanto no abstraktās klases Aktivitāte vai tās radinieki FragmentActivity, AppCompatActivity utt. Pievienošana paplašina darbību. Darbības klasei ir jābūt metodei onCreate(). Novietojiet peles kursoru klasē un izvēlieties no izvēlnes kods | Ignorēt metodes(Ctrl+O). Dialoglodziņā mēs meklējam vajadzīgo klasi, uz tastatūras varat ierakstīt pirmās rakstzīmes Ātrā meklēšana. Izveidotajā metodē jums ir jāizsauc metode setContentView(), kas ekrānā ielādēs sagatavoto marķējumu. Mums būs tāda iespēja.

Package lv.alexanderklimov.helloworld; importēt android.app.Activity; importēt android.os.Bundle; /** * Izveidoja Aleksandrs Klimovs 12.01.2014. */ publiskā klase AboutActivity paplašina darbību ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); ) )

Tagad sākas vissvarīgākais. Mūsu uzdevums ir pāriet uz jaunu ekrānu, kad pirmajā ekrānā tiek noklikšķināts uz pogas. Atgriezīsimies klasē Galvenā darbība. Uzrakstīsim pogas klikšķu apstrādātāju:

Public Void onClick(Skatīt skats) ( Intent intent = new Intent(MainActivity.this, AboutActivity.class); startActivity(intent); )

Šeit es izmantoju nodarbībā aprakstīto pogu klikšķu apstrādes metodi.

Lai sāktu jaunu ekrānu, jums ir jāizveido klases gadījums Nolūks un norādiet pašreizējo klasi pirmajā parametrā un klasi pārejai otrajā, mums ir šis Par aktivitāti. Pēc tam metodi sauc startActivity(), kas palaiž jaunu ekrānu.

Ja tagad mēģināsit pārbaudīt lietojumprogrammu emulatorā, tiks parādīts kļūdas ziņojums. Ko mēs izdarījām nepareizi? Mēs nokavējām vienu svarīgu soli. Jums jāreģistrē jauns Aktivitāte manifestā AndroidManifest.xml. Atrodiet šo failu savā projektā un veiciet dubultklikšķi uz tā. Tiks atvērts faila rediģēšanas logs. Pievienojiet jaunu tagu pēc noslēguma atzīmes pirmajai aktivitātei. Rakstiet pats un aktīvi izmantojiet padomus. Jūs iegūsit sekojošo:

Šeit noder virknes resurss about_title. Palaidiet lietojumprogrammu, noklikšķiniet uz pogas un atveriet logu Par programmu. Tādējādi mēs uzzinājām, kā izveidot jaunu logu un izsaukt to, noklikšķinot uz pogas. Un mūsu rīcībā ir parādījusies mega ērta programma - tagad vienmēr būs pa rokai mājiens, ko kaķis dara, kad iet pa kreisi.

Vēlreiz vēršu uzmanību uz to, ka otrā izveidotā aktivitāšu klase ir jāmanto no klases Aktivitāte vai līdzīgi ( ListActivity utt.), jābūt XML iezīmēšanas failam (ja nepieciešams) un jābūt ierakstītam manifestā.

Pēc metodes izsaukšanas startActivity() sāksies jauna darbība (šajā gadījumā Par aktivitāti), tas kļūs redzams un tiks pārvietots uz skursteņa augšdaļu, kurā ir darbojošie komponenti. Izsaucot metodi pabeigt () no jaunās aktivitātes (vai nospiežot aparatūras atpakaļatkāpes taustiņu), tā tiks aizvērta un noņemta no steka. Izstrādātājs var arī pāriet uz iepriekšējo (vai jebkuru citu) darbību, izmantojot to pašu metodi startActivity().

Trešā ekrāna izveide - veids slinkiem

Programmētāji, tāpat kā kaķi, ir slinki radījumi. Vienmēr atcerieties, ka darbībai ir jāizveido marķējums un klase, kas tiek mantota Aktivitāte, un tad neaizmirsti reģistrēt klasi manifestā - ak nu, kas pie velna.

Šajā gadījumā izvēlieties no izvēlnes fails | Jauns | darbība | pamatdarbība(vai cits modelis). Pēc tam parādīsies pazīstamais logs jaunas aktivitātes izveidei. Aizpildiet obligātos laukus.

Noklikšķiniet uz pogas Pabeigt un darbība būs gatava. Lai to pārbaudītu, atveriet manifesta failu un pārbaudiet, vai nav jauna ieraksta. Es nerunāju par klases failiem un iezīmēm, tie parādīsies jūsu priekšā.

Pats galvenās aktivitātes ekrānā pievienojiet jaunu pogu un ierakstiet kodu, lai pārietu uz izveidoto aktivitāti.

Sākumā es ieteiktu manuāli izveidot visas nepieciešamās sastāvdaļas jaunai darbībai, lai saprastu attiecības starp klasi, marķējumu un manifestu. Un, kad jūs to pamanīsit, varat izmantot aktivitāšu izveides vedni, lai paātrinātu darbību.

Datu nodošana starp darbībām

Mēs izmantojām vienkāršāko piemēru, lai izsauktu citu darbību ekrānu. Dažreiz ir nepieciešams ne tikai izsaukt jaunu ekrānu, bet arī pārsūtīt datus uz to. Piemēram, lietotājvārds. Šajā gadījumā jums ir jāizmanto īpaša zona papildu dati, kas klasei ir Nolūks.

Novads papildu dati ir pāru saraksts atslēga/vērtība, kas tiek nodots kopā ar nolūku. Virknes tiek izmantotas kā atslēgas, un vērtībām varat izmantot jebkurus primitīvus datu tipus, primitīvu masīvus, klases objektus saišķis un utt.

Lai pārsūtītu datus citai darbībai, izmantojiet metodi liktExtra():

Intent.putExtra("Atslēga", "Vērtība");

Saņemšanas darbībai ir jāizsauc kāda piemērota metode: getIntExtra(), getStringExtra() utt.:

Int skaits = getIntent().getIntExtra("nosaukums", 0);

Pārveidosim iepriekšējo piemēru. Mums jau ir trīs aktivitātes. Pirmajai darbībai būs divi teksta lauki un poga. Izskats var būt šāds:

Otrajā aktivitātē Otrā aktivitāte iestatiet elementu teksta skats, kurā parādīsim no pirmās aktivitātes saņemto tekstu. Uzrakstīsim šādu metodes kodu onCreate() otrajā aktivitātē.

@Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); String user = "Dzīvnieks"; String gift = "donut hole"; TextView infoTextView = (TextView)Id(RBy) .id.textViewInfo); infoTextView.setText(lietotājs + " , jums tika dota " + dāvana); )

Ja mēs tagad palaižam programmu un vienkārši izsauksim otro logu, kā aprakstīts raksta pirmajā daļā, mēs redzēsim noklusējuma uzrakstu ZhYvotnoe, tev iedeva virtuļa caurumu. Piekrītu, ir diezgan žēl saņemt šādas ziņas.

Labojam situāciju. Pievienojiet kodu pirmajai darbībai:

Public Void onClick(View view) ( EditText userEditText = (ReditText) findViewById(R.id.editTextUser); EditText giftEditText = (ReditText) findViewById(R.id.editTextGift); Intent.intentMa =in IntentthintentMa =intent. klase); // ievietojiet tekstu no pirmā teksta lauka lietotājvārda atslēgā intent.putExtra("lietotājvārds", userEditText.getText().toString()); // nospiediet tekstu no otrā teksta lauka dāvanas atslēgā intent.putExtra("dāvana", dāvanaEditText.getText().toString()); startActivity(intent); )

Mēs ievietojām speciālā priekšmetu konteinerā Nolūks divas atslēgas ar vērtībām, kas ņemtas no teksta laukiem. Kad lietotājs ievadīs datus teksta laukos, tie nonāks šajā konteinerā un tiks nodoti otrajai darbībai.

Otrajai darbībai jābūt gatavai sirsnīgu ziņojumu saņemšanai, kā norādīts tālāk (izcelts treknrakstā).

// Noklusējuma vērtības String user = "LIFE"; Stīgu dāvana = "donut hole"; lietotājs = getIntent().getExtras().getString("lietotājvārds"); dāvana = getIntent().getExtras().getString("dāvana"); TextView infoTextView = (TextView)findViewById(R.id.textViewInfo); infoTextView.setText(lietotājs + " , jums tika dota " + dāvana);

Tagad ziņa nešķiet tik aizskaroša, bet dažiem pat patīkama. Sarežģītos piemēros datu apstrādes laikā ir vēlams pievienot validāciju. Pastāv situācijas, kad sākat otru darbību ar tukšiem datiem, piemēram, nulles, kas var avarēt lietojumprogrammu.

Mūsu gadījumā mēs zinām, ka mēs gaidām virknes vērtību, tāpēc kodu var pārrakstīt šādi:

nolūks nolūks = getIntent(); lietotājs = intent.getStringExtra("lietotājvārds");

Lietotājs = getIntent().getStringExtra("lietotājvārds");

Programmai ir trūkums – nav skaidrs, no kā saņemam sveicienus. Jebkurš labi audzināts pērtiķis nepieņems dāvanu no anonīma avota. Tāpēc mājasdarbam pievienojiet vēl vienu teksta lauku, lai ievadītu tā lietotāja vārdu, kurš sūta ziņojumu.

Google iesaka atslēgām izmantot šādu formātu: jūsu pakotnes nosaukums kā prefikss, kam seko pati atslēga. Šajā gadījumā jūs varat būt pārliecināti, ka atslēga ir unikāla, mijiedarbojoties ar citām lietojumprogrammām. Apmēram šādi:

Publiskā galīgā statiskā virkne LIETOTĀJS = "ru.alexanderklimov.myapp.USER";

Kas ierāmēja kaķi Vasku - rezultātu atgūstam

Ne vienmēr ir pietiekami vienkārši nodot datus citai darbībai. Dažreiz jums ir jāsaņem informācija no citas darbības, kad tā ir aizvērta. Ja pirms mēs izmantojām metodi startActivity (nolūka nolūks), tad ir saistīta metode startActivityForResult(Intent intent, int RequestCode). Atšķirība starp metodēm slēpjas papildu parametrā pieprasījuma kods. Tas būtībā ir tikai vesels skaitlis, ko varat iedomāties par sevi. Tas ir nepieciešams, lai atšķirtu, no kā iegūts rezultāts. Pieņemsim, ka jums ir pieci papildu ekrāni un jūs piešķirat tiem vērtības no 1 līdz 5, un no šī koda varat noteikt, kura rezultāts jums jāapstrādā. Varat izmantot vērtību -1, tad tā būs līdzvērtīga metodes izsaukšanai startActivity(), t.i. mēs nesasniegsim nekādu rezultātu.

Ja izmantojat metodi startActivityForResult(), tad jums ir jāignorē kodā norādītā metode, lai saņemtu rezultātu onActivityResult() un apstrādājiet rezultātu. Apjucis? Apskatīsim piemēru.

Pieņemsim, ka esat detektīvs. Saņemta informācija, ka restorānā no kādas ietekmīgas personas galda nozagti divi desas gabali un citi izstrādājumi. Aizdomas krita uz trim aizdomās turamajiem - vārnu, sasodītu suni un kaķi Vasku.

Viens no apmeklētājiem sniedza fotoattēlu sēriju no sava pontona iPhone:


Ir arī cita liecinieka liecība: Un Vaska klausās un ēd.

Veidojam jaunu projektu Šerloks ar divām aktivitātēm. Pirmajā ekrānā būs poga, lai pārslēgtos uz otro ekrānu, un teksta etiķete, kas parādīs zagļa vārdu.