
ui_3k1
Gesperrt
Hallo,
ich möchte hier kurz meine ersten Erkenntnisse zum Thema Fragments mitteilen.
Gleichzeitig habe ich schon eine konkrete Frage, bei der ich hoffe, dass jemand, der sich im Thema etwas besser auskennt als ich, mir diese beantworten kann.
Als Grundlage dient mir ein Navigation Drawer.
Der folgende Code funktioniert. Allerdings möchte ich wissen, ob diese Vorgehensweise nicht zu umständlich ist - bzw. ob es auch einfacher geht. Wenn es einfacher geht, würde mich interessieren "wie".
Was kann Probleme bei Fragments bereiten:
-ein Fragment ist keine Activity (jedenfalls nicht was die Implementierung der Funktionalität angeht - "onButtonClick" so ohne weiteres nicht möglich, da in der Main dann nach der Funktionalität "gesucht" werden würde)
-allerdings will ein Fragment behandelt werden wie eine Activity. Jedenfalls hinsichtlich des Lebenszyklus
Im folgenden Code sind meiner Meinung nach
Die .xml-Dateien
activiy_main.xml
-Stellt die einzelnen Fragment-Inhalte durch folgenden Code dar
home_fragment.xml
-stellt eine "Seite" mit wenig Funktionalität dar (mit einer kleinen Activity vergleichbar)
Die .java-Dateien
MainActivity.java
-Bietet eine Art Schnittstelle für die Übertragung der Daten
HomeFragment.java
-initialisiert GUI, wenn Activity geladen und führt weitere Aktionen aus
Communicator.java
-stellt Schnittstellen-Fktn bereit (leicht erkennbar)^^
Zusammengefasst:
Eigentlich springe ich "nur" auf ein Fragment (einer Activity) und löse da durch einen Button-Klick eine Counter-Erhöhung aus. Bei obigem Beispiel wird aber recht viel zusätzlicher Code benötigt, um das gangbar zu machen. Braucht es das wirklich, oder habe ich mir etwas zu viel Arbeit gemacht?
Darüber hinaus kann ich mir vorstellen, dass die Main (bzw. "übergeordneten Activities") irgendwann so voll wird/werden, dass man extrem schnell den Überblick verliert. Wie lässt sich dieses Problem angehen?
Ich hoffe es ist halbwegs nachvollziehbar wie der Code in dem Beispiel funktioniert.
Vielen Dank vorab!
ich möchte hier kurz meine ersten Erkenntnisse zum Thema Fragments mitteilen.
Gleichzeitig habe ich schon eine konkrete Frage, bei der ich hoffe, dass jemand, der sich im Thema etwas besser auskennt als ich, mir diese beantworten kann.
Als Grundlage dient mir ein Navigation Drawer.
Der folgende Code funktioniert. Allerdings möchte ich wissen, ob diese Vorgehensweise nicht zu umständlich ist - bzw. ob es auch einfacher geht. Wenn es einfacher geht, würde mich interessieren "wie".
Was kann Probleme bei Fragments bereiten:
-ein Fragment ist keine Activity (jedenfalls nicht was die Implementierung der Funktionalität angeht - "onButtonClick" so ohne weiteres nicht möglich, da in der Main dann nach der Funktionalität "gesucht" werden würde)
-allerdings will ein Fragment behandelt werden wie eine Activity. Jedenfalls hinsichtlich des Lebenszyklus
Im folgenden Code sind meiner Meinung nach
Die .xml-Dateien
activiy_main.xml
-Stellt die einzelnen Fragment-Inhalte durch folgenden Code dar
Code:
<!-- Framelayout zeigt versch. Fragment-Inhalte an -->
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
-stellt eine "Seite" mit wenig Funktionalität dar (mit einer kleinen Activity vergleichbar)
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/txtLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/start_header_txt"
android:textSize="16dp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="92dp"
android:text="@string/button_start_service" />
<TextView
android:id="@+id/tv_GPS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="@string/home_gps_data_txt" />
</RelativeLayout>
MainActivity.java
-Bietet eine Art Schnittstelle für die Übertragung der Daten
Code:
@Override
public void respond(String data)
{
FragmentManager fragmentManager = getFragmentManager();
HomeFragment homeFragment = (HomeFragment) fragmentManager.findFragmentById(R.id.frame_container);
homeFragment.changeText(data);
}
HomeFragment.java
-initialisiert GUI, wenn Activity geladen und führt weitere Aktionen aus
Code:
public class HomeFragment extends Fragment implements View.OnClickListener
{
Communicator communicator;
Button btn_start;
TextView textView;
int counter = 0;
public HomeFragment()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
/* Button in Fragment einbauen. WICHTIG: Activity ist hier fertig geladen */
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
communicator = (Communicator) getActivity();
btn_start = (Button) getActivity().findViewById(R.id.button1);
textView = (TextView) getActivity().findViewById(R.id.tv_GPS);
btn_start.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
counter++;
communicator.respond("GPS " + counter + " !");
}
public void changeText(String data)
{
textView.setText(data);
}
}
Communicator.java
-stellt Schnittstellen-Fktn bereit (leicht erkennbar)^^
Code:
public interface Communicator
{
public void respond(String data);
}
Eigentlich springe ich "nur" auf ein Fragment (einer Activity) und löse da durch einen Button-Klick eine Counter-Erhöhung aus. Bei obigem Beispiel wird aber recht viel zusätzlicher Code benötigt, um das gangbar zu machen. Braucht es das wirklich, oder habe ich mir etwas zu viel Arbeit gemacht?
Darüber hinaus kann ich mir vorstellen, dass die Main (bzw. "übergeordneten Activities") irgendwann so voll wird/werden, dass man extrem schnell den Überblick verliert. Wie lässt sich dieses Problem angehen?
Ich hoffe es ist halbwegs nachvollziehbar wie der Code in dem Beispiel funktioniert.
Vielen Dank vorab!