You are on page 1of 28

activity_main.

xml

In aceasta pagina xml s-a folosit pe post de parent-view


"CoordinatorLayout" cuprinzand atributele :
< xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
Pe post de child-view s-au folosit urmatoarele :
"AppBarLayout" cuprinzand atributele :
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/appbar_padding_top"
android:theme="@style/AppTheme.AppBarOverlay">

"TabLayout" cuprinzand atributele :


<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">

Acest layout la randul lui cuprinzand 2 child_view :


(pentru cele 2 categorii)
"Teorie"
<android.support.design.widget.TabItem
android:id="@+id/tabItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tab_text_1" />
"Teste"
<android.support.design.widget.TabItem
android:id="@+id/tabItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tab_text_2"

"ViewPager" cuprinzand atributele :


<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>

Acest layout contine informatiile preluate din baza de date.


tab1_teorie.xml

In aceasta pagina xml s-a folosit pe post de parent-view


"Relative Layout" cuprinzand atributele :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shore"
tools:context="sicktrending.com.fizica.MainActivity">

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
Pe post de child-view s-au folosit urmatoarele :
"RecyclerView" cuprinzand atributele :
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_menu"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v7.widget.RecyclerView>

Acest layout reprezinta o lista cu "items" , preluand prin java si inca un


model xml design-ul fiecarui item.
tab2_teste.xml

In aceasta pagina xml s-a folosit pe post de parent-view


"Linear Layout" cuprinzand atributele :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/shore"
xmlns:app="http://schemas.android.com/apk/res-auto">

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
"vertical" referindu-se la organizarea continutului , in linii.
Pe post de child-view s-au folosit urmatoarele :
"Button1" cuprinzand atributele :
<Button
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#4f0e0d0e"
android:layout_marginTop="80dp"
android:id="@+id/termo"
android:textColor="@android:color/white"
android:textSize="30sp"
android:text="Termodinamica"
/>

"Button2" cuprinzand atributele :


android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#4f0e0d0e"
android:layout_marginTop="10dp"
android:id="@+id/optica"
android:textColor="@android:color/white"
android:textSize="30sp"
android:text="optica"
/>

"Button3" cuprinzand atributele :


<Button
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#4f0e0d0e"
android:layout_marginTop="10dp"
android:id="@+id/mecanica"
android:textColor="@android:color/white"
android:textSize="30sp"
android:text="Mecanica"
/>

"Button4" cuprinzand atributele :


<Button
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="#4f0e0d0e"
android:layout_marginTop="10dp"
android:id="@+id/curentcont"
android:textColor="@android:color/white"
android:textSize="28sp"
android:text="curent continuu si alternativ"
/>

"Button5" cuprinzand atributele :


<Button
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="#4f0e0d0e"
android:layout_marginTop="10dp"
android:id="@+id/relativitatea"
android:textColor="@android:color/white"
android:textSize="28sp"
android:text="Relativitatea restransa"
/>

Aceste butoane , cand sunt apasate prin intermediul fisierului java atribuit ,
te redirectioneaza la una din paginile la care e facuta conexiunea.

category_item.xml

In aceasta pagina xml s-a folosit pe post de parent-view


"CardView" cuprinzand atributele :
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="10dp"
android:layout_margin="10dp"
app:cardCornerRadius="5dp">
"match_parent" referindu-se la dimensiunea acestuia , termenul
reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
"wrap_content" referindu-se la dimensiunea acestuia , termenul
reprezentand acoperirea continutului .
Pe post de child-view s-au folosit urmatoarele :
"TextView" cuprinzand atributele :
<TextView
android:id="@+id/category_name"
android:text="Name of Category"
android:textColor="@android:color/black"
android:background="@android:color/white"
android:textSize="20sp"
android:gravity="center"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

capitole_item.xml

In aceasta pagina xml s-a folosit pe post de parent-view


"CardView" cuprinzand atributele : android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="10dp"
android:layout_margin="10dp"
app:cardCornerRadius="5dp"
>

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
"wrap_content" referindu-se la dimensiunea acestuia , termenul
reprezentand acoperirea continutului .
Pe post de child-view s-au folosit urmatoarele :
"TextView" cuprinzand atributele :
<TextView
android:id="@+id/capitole_name"
android:text="Name of Capitol"
android:textColor="@android:color/black"
android:background="@android:color/white"
android:textSize="20sp"
android:gravity="center"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

activity_capitole.xml

In aceasta pagina xml s-a folosit pe post de parent-view


"Relative Layout" cuprinzand atributele :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CapitoleList"
android:background="@drawable/shore"
>

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
Pe post de child-view s-au folosit urmatoarele :
"RecyclerView" cuprinzand atributele :
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_capitol"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

</android.support.v7.widget.RecyclerView>

Acest layout reprezinta o lista cu "items" , preluand prin java si inca un


model xml design-ul fiecarui item.
activity_teorie.xml

In aceasta pagina xml s-a folosit pe post de parent-view "ScrollView"


cuprinzand atributele :
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".Teorie"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shore">

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
Aceasta permite deplasarea sub nivelul ecranului pentru texte de
dimensiuni mari.
Pe post de child-view s-au folosit urmatoarele :
"RelativeLayout" cuprinzand atributele :
<RelativeLayout

android:layout_width="match_parent"
android:layout_height="wrap_content"

>

"TextView" cuprinzand atributele :


<TextView
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/teorie"
android:gravity="center"
android:text="Description"/>

"TextView" cuprinzand atributele :


<TextView
android:id="@+id/t1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/teorie"
android:layout_centerHorizontal="true"
android:layout_margin="1dp"
android:gravity="center"
android:layout_marginTop="10dp"
android:text="LEGENDA"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#000000"/>

"ImageView" cuprinzand atributele :


<ImageView
android:id="@+id/img1"
android:layout_margin="10dp"
android:layout_below="@id/t1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>

+ 3 "ImageView" nefolosite (pe post de rezerva complet functionale)

activity_chestionar_curent.xml

In aceasta pagina xml s-a folosit pe post de parent-view


"RelativeLayout" cuprinzand atributele
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shore">

"match_parent" referindu-se la dimensiunea acestuia , termenul


reprezentand extinderea maxima (pe tot ecranul) a "layout"-ului.
Pe post de child-view s-au folosit urmatoarele :
"RelativeLayout" cuprinzand atributele :
<RelativeLayout

android:layout_width="match_parent"
android:layout_height="wrap_content"
>

"Button" cuprinzand atributele :


<Button
android:layout_margin="2dp"
android:id="@+id/answer1"
android:background="@drawable/button_outline"
android:textStyle="normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:text="Button" />

"Button" cuprinzand atributele :


<Button
android:layout_margin="2dp"
android:id="@+id/answer1"
android:background="@drawable/button_outline"
android:textStyle="normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:text="Button" />

"Button" cuprinzand atributele :


<Button
android:background="@drawable/button_outline"
android:id="@+id/answer2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/answer1"
android:layout_margin="2dp"
android:text="Button" />

"Button" cuprinzand atributele :


<Button
android:background="@drawable/button_outline"
android:id="@+id/answer3"
android:layout_margin="2dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/answer2"
android:text="Button" />
"Button" cuprinzand atributele :
<Button
android:background="@drawable/button_outline"
android:id="@+id/answer4"
android:layout_margin="2dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/answer3"
android:text="Button" />

Aceste butoane , cand sunt apasate prin intermediul fisierului java atribuit ,
iti indica daca e gresit sau corect raspunsul selectat.

"TextView" cuprinzand atributele :


<TextView
android:background="@drawable/button_outline"
android:textColor="#000000"
android:id="@+id/scor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="8dp"
android:textSize="24dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:text="Raspunsuri corecte : " />

"TextView" cuprinzand atributele :


<TextView
android:id="@+id/question"
android:layout_width="match_parent"
android:layout_height="380dp"
android:textColor="#000000"
android:layout_centerHorizontal="true"
android:gravity="center"
android:textStyle="italic"
android:textSize="24dp"
android:layout_below="@id/scor"
android:text="TextView"
android:layout_above="@id/answer3"/>

CapitoleList.java

public class CapitoleList extends AppCompatActivity{


RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;

FirebaseDatabase database;
DatabaseReference capitole;

String categoryId = "";

FirebaseRecyclerAdapter<Capitole,CapitoleViewHolder> adapter;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_capitole);

//Firebase
database = FirebaseDatabase.getInstance();
capitole = database.getReference("Capitole");

recyclerView = (RecyclerView) findViewById(R.id.recycler_capitol);


recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);

//intent
if(getIntent() !=null)
categoryId=getIntent().getStringExtra("CategoryId");
if(!categoryId.isEmpty()&&categoryId !=null){
loadCapitole(categoryId);
}
}

private void loadCapitole(String categoryId) {


adapter = new FirebaseRecyclerAdapter<Capitole,
CapitoleViewHolder>(Capitole.class,R.layout.capitole_item,CapitoleViewHolder.cl
ass,capitole.orderByChild("MenuId").equalTo(categoryId)) {
@Override
protected void populateViewHolder(CapitoleViewHolder viewHolder,
Capitole model, int position) {
viewHolder.capitole_name.setText(model.getName());

final Capitole local = model;


viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean
isLongClick) {
//Get CapitoleId
Intent teorie = new Intent(CapitoleList.this,
Teorie.class);
teorie.putExtra("CapitoleId",
adapter.getRef(position).getKey());
startActivity(teorie);
}
});

}
};
recyclerView.setAdapter(adapter);
}
}
Pe scurt aceasta este lista pentru capitole , aici se initiaza baza de date , la
care se si face legatura , se declara componentele paginii xml atribuite si se
fixeaza lista de capitole generand din baza de date cate un item pentru
fiecare capitol.

ChestionarCurent.java

package sicktrending.com.fizica;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Random;

public class ChestionarCurent extends AppCompatActivity {


Button answer1, answer2 , answer3 , answer4 ;
TextView scor , question;

private QuestionsCurent mQuestionsCurent = new QuestionsCurent();

private String mAnswer;


private int mScor= 0 ;
private int mQuestionsLenght = mQuestionsCurent.mQuestions.length;
Random r;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chestionar_termo);

long seed = System.nanoTime();


r = new Random(seed);

answer1 = (Button) findViewById(R.id.answer1);


answer2 = (Button) findViewById(R.id.answer2);
answer3 = (Button) findViewById(R.id.answer3);
answer4 = (Button) findViewById(R.id.answer4);
scor = (TextView) findViewById(R.id.scor);
question = (TextView) findViewById(R.id.question);

scor.setText("Raspunsuri corecte : " +mScor);

updateQuestion(r.nextInt(mQuestionsLenght));

answer1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

if(answer1.getText() == mAnswer)
{
mScor ++;
scor.setText("Raspunsuri corecte : " +mScor);
updateQuestion(r.nextInt(mQuestionsLenght));
}
else {gameOver();}

}
});

answer2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(answer2.getText() == mAnswer)
{
mScor ++;
scor.setText("Raspunsuri corecte : " +mScor);
updateQuestion(r.nextInt(mQuestionsLenght));
}
else {gameOver();}

}
});

answer3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(answer3.getText() == mAnswer)
{
mScor ++;
scor.setText("Raspunsuri corecte : " +mScor);
updateQuestion(r.nextInt(mQuestionsLenght));
}
else {gameOver();}

}
});
answer4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(answer3.getText() == mAnswer)
{
mScor ++;
scor.setText("Raspunsuri corecte : " +mScor);
updateQuestion(r.nextInt(mQuestionsLenght));
}
else {gameOver();}

}
});

}
private void updateQuestion (int num)
{question.setText(mQuestionsCurent.getQuestion(num));
answer1.setText(mQuestionsCurent.getChoice1(num));
answer2.setText(mQuestionsCurent.getChoice2(num));
answer3.setText(mQuestionsCurent.getChoice3(num));
answer4.setText(mQuestionsCurent.getChoice4(num));

mAnswer = mQuestionsCurent.getCorrectAnswer(num);

}
private void gameOver(){
AlertDialog.Builder alertDialogBuilder = new
AlertDialog.Builder(ChestionarCurent.this);
alertDialogBuilder.setMessage("Raspuns gresit ! Ai raspuns corect la "
+mScor +" intrebari.")
.setCancelable(false)
.setPositiveButton("Reincearca",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialogInterface, int i) {
startActivity(new
Intent(getApplicationContext(),ChestionarTermo.class));
finish();

}
})
.setNegativeButton("Iesi",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialogInterface, int i) {
finish();

}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}

Aceasta este pagina java atribuita paginilor xml de tip chestionar , in care se
initiaza raspunsurile si se verifica dupa ce este apasat unul dintre butoane ,
aceasta este instruita sa afiseze un anunt daca ai gresit raspunsul si sa-ti
dea de ales daca sa reincerci sau sa iesi din chestionar , daca ai pus
raspunsul corect atunci scorul afisat sus se va schimba (+1) .
De asemenea dupa fiecare raspuns corect se va afisa urmatoarea intrebare
care este generata aleatoriu din setul de intrebari dintr-un alt fisier java.
QuestionsCurent.java
package sicktrending.com.fizica;

public class QuestionsCurent {


public String mQuestions[] = { "Unitatea de masura a rezistentei electrice
este:" , "Instrumentul pentru masurarea rezistentei electrice se numeste:" ,
"Puterea termica pentru o portiune de circuit este:"
,"Legea conductiei electrice se numeste:" , "Unitatea de masura a
sarcinii electrice este:" , "Intre corpuri incarcate electric cu sarcini
electrice de acelasi semn se manifesta:" ,
"Cine a definit legea urmatoare: \"Forta de interactiune dintre
doua corpuri punctiforme avand sarcinile q¹ si q² este direct proportionala cu
sarcinile electrice si invers proportionala cu patratul distantei dintre
ele\":" ,
"Forta de interactiune nu depinde de:" , "Unitatea de masura pentru
intensitatea curentului electric este:" , "Elementele unui circuit sunt:"

};

private String mChoices[][]= { {

},
{"ohm",
"A",
"N",
"M"

},
{"Ohmmetrul",
"Termometrul",
"Voltmetrul",
"Ampermetrul"

},
{"suma dintre rezistenta electrica si patratul intensitatii
curentului electric",
"produsul dintre rezistenta electrica si patratul
intensitatii curentului electric",
"rezistenta electrica este invers proportionala cu
intensitatea curentului electric",
"diferenta dintre rezistenta electrica si patratul
intensitatii curentului electric"

},
{"legea lui Joule",
"legea lui Kirkhoff",
"legea lui Ohm",
"legea lui Dalton"
},
{"N",
"J",
"S",
"C"

},
{"interactiuni de atractie si de respingere",
"nu se manifesta interactiuni",
"interactiuni de respingere",
"interactiuni de atractie"

},
{"Coulomb",
"Joule",
"Ohm",
"Faraday"

},
{"masa corpurilor",
"mediul in care se afla corpurile",
"distanta dintre corpuri",
"sarcinile corpurilor"

},
{"m",
"A",
"N",
"m²"

},
{"generator, consumator, intrerupator si conductoare de legatura",
"generator si conductoare de legatura",
"conductoare de legatura si consummator",
"intrerupator si consummator"

};

private String mCorrectAnswers[] = {


"ohm" , "Ohmmetrul" , "produsul dintre rezistenta electrica si
patratul intensitatii curentului electric" , "legea lui Ohm" ,"C",
"interactiuni de respingere" , "Coulomb" , "masa corpurilor" , "A" ,
"generator, consumator, intrerupator si conductoare de legatura"

};
public String getQuestion(int a){
String question = mQuestions[a];
return question;
}

public String getChoice1(int a){


String choice = mChoices[a][0];
return choice;
}
public String getChoice2(int a){
String choice = mChoices[a][1];
return choice;
}
public String getChoice3(int a){
String choice = mChoices[a][2];
return choice;
}
public String getChoice4(int a){
String choice = mChoices[a][3];
return choice;
}
public String getCorrectAnswer(int a){
String answer = mCorrectAnswers[a];
return answer;
}
}

Aici se afla setul de intrebari , fiecare "-" reprezantand cate o intrebare , se


respecta ordinea intrebarilor mai jos , fiecarei intrebari ii corespund un set
de raspuns dintre care doar un raspuns corect , asadar ordinea in care sunt
amplasate conteaza .

TabTeorie.java

package sicktrending.com.fizica;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import sicktrending.com.fizica.Interface.ItemClickListener;
import sicktrending.com.fizica.Model.Category;
import sicktrending.com.fizica.ViewHolder.MenuViewHolder;

public class TabTeorie extends Fragment {


private ViewPager mViewPager;
FirebaseDatabase database;
DatabaseReference category;

RecyclerView recycler_menu;
RecyclerView.LayoutManager layoutManager;

FirebaseRecyclerAdapter<Category, MenuViewHolder> adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab1_teorie, container,
false);
return rootView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

if (getView() == null) {
return;
}
//Init Firebase
database = FirebaseDatabase.getInstance();
category = database.getReference("Category");

//Load category
recycler_menu = (RecyclerView)
getView().findViewById(R.id.recycler_menu);
recycler_menu.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getView().getContext());
recycler_menu.setLayoutManager(layoutManager);
loadMenu();
}
private void loadMenu() {
adapter = new FirebaseRecyclerAdapter<Category,
MenuViewHolder>(Category.class, R.layout.category_item, MenuViewHolder.class,
category) {
@Override
protected void populateViewHolder(MenuViewHolder viewHolder,
Category model, int position) {
viewHolder.txtCategoryName.setText(model.getName());
final Category clickItem = model;
viewHolder.setItemClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean
isLongClick) {
//Get CategoryID
Intent capitoleList = new
Intent(getView().getContext(), CapitoleList.class);
capitoleList.putExtra("CategoryId",
adapter.getRef(position).getKey());
startActivity(capitoleList);
}
});
}
};
recycler_menu.setAdapter(adapter);
}
}

Aceasta este lista pentru categorii (lista capitolelor principale) , aici se


initiaza baza de date , la care se si face legatura , se declara componentele
paginii xml atribuite si se fixeaza lista de categorii generand din baza de
date cate un item pentru fiecare categorie cu ajutorul "RecyclerView"-ului.

TabTeste.java

package sicktrending.com.fizica;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import sicktrending.com.fizica.Model.Category;
import sicktrending.com.fizica.ViewHolder.MenuViewHolder;

public class TabTeste extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tab2_teste, container,
false);
return rootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

if (getView() == null) {
return;
}
final Button btnTermo = (Button) getView().findViewById(R.id.termo);
btnTermo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getView().getContext(),
ChestionarTermo.class);
startActivity(intent);
}
});
final Button btnCurent = (Button)
getView().findViewById(R.id.curentcont);
btnCurent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getView().getContext(),
ChestionarCurent.class);
startActivity(intent);
}
});
final Button btnRelativ = (Button)
getView().findViewById(R.id.relativitatea);
btnRelativ.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getView().getContext(),
ChestionarRelativ.class);
startActivity(intent);
}
});
final Button btnMecanica = (Button)
getView().findViewById(R.id.mecanica);
btnMecanica.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getView().getContext(),
ChestionarMecanica.class);
startActivity(intent);
}
});
final Button btnOptica = (Button) getView().findViewById(R.id.optica);
btnOptica.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getView().getContext(),
ChestionarOptica.class);
startActivity(intent);
}
});
}
}

Acesta este codul atribuit paginii xml pentru chestionare , butoanele


redirectionand la paginile xml reprezentative pentru fiecare tip de
chestionar.

Teorie.java

package sicktrending.com.fizica;

import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

import sicktrending.com.fizica.Model.Capitole;

public class Teorie extends AppCompatActivity{


TextView teorie_desc ;
ImageView img1;
ImageView img2;
ImageView img3;
ImageView img4;

String capitoleId="";

FirebaseDatabase database;
DatabaseReference teories;
Capitole teorie;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_teorie);

//Firebase

database = FirebaseDatabase.getInstance();
teories = database.getReference("Capitole");

teorie_desc = (TextView)findViewById(R.id.teorie);
img1 = (ImageView)findViewById(R.id.img1);
img2 = (ImageView)findViewById(R.id.img2);
img3 = (ImageView)findViewById(R.id.img3);
img4 = (ImageView)findViewById(R.id.img4);

//get Teorie id from intent

if(getIntent()!=null)
capitoleId= getIntent().getStringExtra("CapitoleId");
if(!capitoleId.isEmpty())
{
getDetailTeorie(capitoleId);
}
}

private void getDetailTeorie(final String capitoleId) {


teories.child(capitoleId).addValueEventListener(new
ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
teorie = dataSnapshot.getValue(Capitole.class);

Picasso.with(getBaseContext()).load(teorie.getImg1()).into(img1);

Picasso.with(getBaseContext()).load(teorie.getImg2()).into(img2);

Picasso.with(getBaseContext()).load(teorie.getImg3()).into(img3);

Picasso.with(getBaseContext()).load(teorie.getImg4()).into(img4);

teorie_desc.setText(teorie.getDescription());
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}
}

Tot pe baza unui "RecyclerView" , acest cod java citeste din baza de date si
atribuie fiecarui capitol cate un ID pentru a diferentia continutul , generand
astfel automat aceeasi pagina xml dar cu continut diferit atribuit pentru
fiecare capitol din baza de date.
De asemenea se initiaza continutul din pagina xml corespondenta.

You might also like