Sunteți pe pagina 1din 9

Rezultatul Lucrari de laborator nr.

5
1. Pentru a ilustra înțelegerea conceptului de fragment în codul sursă al unei aplicații
Android, studenții ar putea include comentarii relevante în locuri cheie ale codului. Iată
un exemplu simplificat utilizând limbajul de programare Java și Android:
// Exemplu de activitate care găzduiește un fragment
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Adăugarea unui fragment în activitate folosind FragmentManager
if (savedInstanceState == null) {
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragmentContainer, new MyFragment());
fragmentTransaction.commit();
}
}
}
// Exemplu de fragment
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
// Inflarea layout-ului fragmentului dintr-un fișier XML
View rootView = inflater.inflate(R.layout.fragment_my, container, false);
// Inițializarea și manipularea elementelor din interiorul fragmentului
TextView fragmentTextView = rootView.findViewById(R.id.fragmentTextView);
fragmentTextView.setText("Acesta este un fragment!");
return rootView;
}
}
În acest exemplu:
1) Comentarii în `MainActivity`:
 Comentariul în `onCreate` explică adăugarea fragmentului în activitate utilizând
FragmentManager.
2) Comentarii în `MyFragment`:
 Comentariul în `onCreateView` explică inflarea layout-ului fragmentului și inițializarea
elementelor din interiorul acestuia.
Aceste comentarii arată că programatorul înțelege conceptul de fragment și modul în care acestea
sunt adăugate și utilizate în cadrul activităților Android. Este important să menționezi detaliile
cheie pentru a evidenția înțelegerea conceptelor, în special în contextul codului sursă al
aplicației.
2. Dacă dorești să prezint un fragment de cod specific pentru fișierele sursă ale proiectului
în Android Studio, ar trebui să avem în vedere un proiect simplificat care să includă o
activitate și un fragment. În continuare, ofer un exemplu simplu de structură a proiectului
Android, cu un fișier pentru activitate și unul pentru fragment:
Structura Fișierelor Proiectului:
1) MainActivity.java - Fișierul pentru Activitate:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new MyFragment())
.commit();
}
}
}
2) MyFragment.java - Fișierul pentru Fragment:
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_my, container, false);
// Inițializarea și manipularea elementelor din interiorul fragmentului
return rootView;
}
}
3) activity_main.xml - Fișierul de Layout pentru Activitate:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
4) fragment_my.xml - Fișierul de Layout pentru Fragment:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- Elemente specifice fragmentului pot fi adăugate aici -->
</LinearLayout>
Explicație:
 `MainActivity.java`: Aceasta este activitatea principală care găzduiește fragmentul.
Fragmentul este adăugat dinamic în cadrul acestei activități.
 `MyFragment.java`: Acesta este fișierul pentru fragment, care se ocupă de inflarea
layout-ului său.
 `activity_main.xml`: Layout-ul activității principale care include un FrameLayout pentru
a găzdui fragmentul.
 `fragment_my.xml`: Layout-ul specific fragmentului, unde pot fi adăugate elemente
specifice fragmentului.
Aceasta este o structură simplificată și poate fi extinsă în funcție de necesități. Este
important să menționezi că aceste exemple sunt orientative și ar trebui adaptate în funcție de
cerințele specifice ale proiectului și de stilul de programare preferat.
3. Pentru a demonstra comunicarea între fragmente și activități, vei utiliza interfețe în Java.
Iată un exemplu simplu de implementare pentru acest scop:
A. Interfața pentru Comunicare:
1) CommunicationListener.java:
// Interfața pentru a comunica între fragment și activitate
public interface CommunicationListener {
void sendData(String data);
}
B. Activitatea care Implementează Interfața:
1) MainActivity.java:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements CommunicationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new MyFragment())
.commit();
}
}
// Metoda din interfață pentru a trimite date către fragment
@Override
public void sendData(String data) {
// Poți gestiona datele primite de la fragment
// în funcție de necesitățile tale
// Exemplu: afișare datelor într-un Toast
Toast.makeText(this, "Date primite: " + data, Toast.LENGTH_SHORT).show();
}
}
C. Fragmentul care Implementează Interfața:
1) MyFragment.java:
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.fragment.app.Fragment;
public class MyFragment extends Fragment {
private CommunicationListener communicationListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_my, container, false);
Button sendButton = rootView.findViewById(R.id.sendButton);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendDataToActivity();
}
});
return rootView;
}
private void sendDataToActivity() {
if (communicationListener != null) {
// Trimite date către activitate prin apelarea metodei din interfață
communicationListener.sendData("Acestea sunt datele din fragment!");
}
}
// Asigurarea că activitatea gazdă implementează interfața
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof CommunicationListener) {
communicationListener = (CommunicationListener) context;
} else {
throw new ClassCastException(context.toString() + " trebuie să implementeze
CommunicationListener");
}
}
}
Explicație:
 `CommunicationListener.java`: Aceasta este interfața care definește metoda sendData()
pentru a trimite date de la fragment la activitate.
 `MainActivity.java`: Aceasta este activitatea principală care implementează interfața
CommunicationListener și oferă o implementare a metodei sendData() pentru a gestiona
datele primite de la fragment.
 `MyFragment.java`: Acesta este fragmentul care utilizează interfața pentru a comunica cu
activitatea. Se asigură că activitatea gazdă implementează interfața și apelează metoda
corespunzătoare pentru a trimite date către activitate.
Acest exemplu ilustrează un mecanism simplu de comunicare între fragment și activitate
utilizând interfețe în Java. Este important să ajustezi acest exemplu în funcție de cerințele
specifice ale proiectului tău.
4. Implementarea corectă a metodelor legate de ciclul de viață al fragmentelor este crucială
pentru asigurarea unui comportament corespunzător al aplicației Android. Iată un
exemplu de cod sursă pentru un fragment care gestionează corect ciclul de viață:
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class MyFragment extends Fragment {
private static final String TAG = "MyFragment";
@Override
public void onAttach(Context context) {
super.onAttach(context);
Log.d(TAG, "onAttach");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
Log.d(TAG, "onCreateView");
View rootView = inflater.inflate(R.layout.fragment_my, container, false);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.d(TAG, "onViewCreated");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "onActivityCreated");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach");
}
}
Explicație:
 Această implementare folosește metodele specifice ciclului de viață al fragmentelor,
precum onAttach, onCreate, onCreateView, onStart, onResume, onPause, onStop,
onDestroyView, onDestroy, și onDetach.
 Fiecare metodă este însoțită de un mesaj de log pentru a evidenția momentul în care
aceasta este apelată.
 Aceste log-uri sunt utile pentru a urmări ordinea în care fragmentul trece prin diferitele
stadii ale ciclului de viață. Pot fi vizualizate în consolă sau într-un instrument de analiză a
log-urilor, cum ar fi Logcat în Android Studio.
Asigură-te că adaptezi implementarea în funcție de necesitățile specifice ale fragmentului
și ale aplicației tale. Utilizarea adecvată a ciclului de viață este esențială pentru evitarea
problemelor legate de gestionarea resurselor și a stării aplicației.
5. AICI TREBUIE SA FIE DIVERSE CAPTURI DE ECRAN CU DEMOSTRAREA CA
CODURILE FUNCTIONEAZA
6. AICI IAR TREBUIE DEMOSTRARE PRIN CAPTURI PRIN INREGISTRAREA
ECRANULUI CA TOTUL ESTE BINE
7. AICI IAR TREBUIE DEMOSTRARE PRIN CAPTURI PRIN INREGISTRAREA
ECRANULUI CA TOTUL ESTE BINE
8. Aici trebuie ceva de genul unei comcluzi la tot ce ati facut

S-ar putea să vă placă și