Die Übergabe von Daten zwischen Activities oder Fragmenten ist eines der grundlegenden Konzepte, die man lernen muss, wenn man mit der Android-Entwicklung beginnt. Obwohl Activities und Fragments nichts anderes als Klassen sind, werden sie in Android als spezielle Klassen betrachtet, da sie grundlegend dafür sind, wie die Benutzeroberfläche von Android funktioniert. Daher übergeben wir ihnen Daten nicht einfach über Konstruktoren, sondern auf eine der folgenden drei Arten:

  1. Intent
  2. Bundle
  3. ViewModel

In dieser Lektion werden wir uns alle diese Elemente anhand praktischer Beispiele ansehen. Lassen Sie uns beginnen.

Beispiel 1: Android Datenübergabe – Fragment an Activity über Intent

Wir haben uns angesehen, wie man Daten von Activity an Fragment übergibt und wie man sowohl eine Liste/Objekt von Activity an Activity als auch einfache primitive Datentypen übergibt.

Heute schauen wir uns an, wie man einfache Datentypen vom Fragment an Activity weitergibt. Wir übergeben Daten über das Intent Objekt.

Was ist ein Fragment?

Ein Fragment ist eine Unteraktivität mit eigenem Lebenszyklus. Fragmente werden von Activities beherbergt. Eine Activity kann mehrere Fragmente beherbergen.

Warum Daten von Fragment an Activity weitergeben?

Nr. Grund
1. Fragmente sind Unteraktivitäten und ermöglichen es uns, verschiedene Bildschirme zu haben, ohne notwendigerweise viele "Aktivitäten" erstellen zu müssen. Daher muessen wir wissen, wie wir Daten von einem "Fragment" an eine "Aktivitaet" uebergeben.
(2) Fragmente wie Activities sind spezielle UI-Klassen, die ein Fenster repräsentieren und daher können wir Daten nicht direkt übergeben, wie wir es mit normalen Klassen tun.

Einführung

  • Wir haben zwei Klassen: eine unsere MainActivity und eine andere eine MyFragment Klasse.
  • Wenn wir die FAB (Floating Action Button) Taste drücken, öffnen wir das MyFragment über die Fragment Transaktion und fügen es an ein FrameLayout an, das wir definieren werden.
  • Das "Fragment" enthält einen Editiertext und einen Spinner.
  • Der Benutzer gibt den Namen des Raumfahrzeugs ein und wählt das Startjahr in der Drehscheibe aus.
  • Wir übergeben dann diese beiden Daten an MainActivity.
  • Anschließend werden die empfangenen Daten in Textviews angezeigt.
  • Wir haben Android Studio als unsere IDE verwendet.
  • Der Code ist zum besseren Verständnis gut kommentiert.

Allgemeine Fragen, die wir beantworten

Mit diesem einfachen Beispiel erforschen wir die folgenden Fragen:

  • Wie übergibt man Daten von Fragment an eine Aktivität.
  • Wie übergebe ich Daten zwischen Fragment und Activity mit Hilfe von Intents.
  • Wie führe ich FragmentTransaction durch.
  • Überschreiben von onResume() und Empfangen von Daten in android.
  • Wie kann ich sowohl mit Fragment als auch mit Aktivität.

Verwendete Tools

  • IDE: Android Studio
  • OS : Windows 8.1
  • PLATTFORM: Android
  • SPRACHE: Java
  • THEMA : Intent,Datenübergabe,Fragment

Los geht’s.

Werfen wir einen Blick auf den Quellcode.

1. Build.gradle

  • Keine externen Abhängigkeiten erforderlich.

2. MainActivity.java

  • Unsere MainActivity,launcher activity.
  • Zuerst referenzieren wir hier Views, in diesem Fall einfache Textviews, um unsere empfangenen Daten anzuzeigen.
  • Wir haben eine Methode: receiveData(), die für den Empfang und das Entpacken der Daten, die wir von der Klasse MyFragment erhalten, verantwortlich ist.
  • Wir werden die Daten in der Methode onResume() empfangen.
  • Da die Methode nicht nur aufgerufen wird, wenn wir das Fragment wieder aufnehmen, sondern auch, nachdem die Aktivität erstellt und gestartet wurde, müssen wir den Aufrufer mit einem einfachen Sender-String identifizieren, den wir jedes Mal senden, wenn wir Daten vom Fragment senden.
  • Wenn der Absender MeinFragment ist, dann machen wir weiter und entpacken unsere Daten.

package com.tutorials.hp.datafragment_activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private TextView nameTxt,yearTxt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    //REFERENCE VIEWS
        nameTxt= (TextView) findViewById(R.id.nameTxt);
        yearTxt= (TextView) findViewById(R.id.yearTxt);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              openFragment();
            }
        });
    }
/*
WHEN ACTIVITY RESUMES
*/
    @Override
    protected void onResume() {
        super.onResume();

    //DETERMINE WHO STARTED THIS ACTIVITY
    final String sender=this.getIntent().getExtras().getString("SENDER_KEY");

    //IF ITS THE FRAGMENT THEN RECEIVE DATA
        if(sender != null)
        {
            this.receiveData();
            Toast.makeText(this, "Received", Toast.LENGTH_SHORT).show();

        }
    }

    /*
        OPEN FRAGMENT
         */
    private void openFragment()
    {
        //PASS OVER THE BUNDLE TO OUR FRAGMENT
        MyFragment myFragment = new MyFragment();
        //THEN NOW SHOW OUR FRAGMENT
        getSupportFragmentManager().beginTransaction().replace(R.id.container,myFragment).commit();
    }

    /*
    RECEIVE DATA FROM FRAGMENT
     */
    private void receiveData()
    {
        //RECEIVE DATA VIA INTENT
        Intent i = getIntent();
        String name = i.getStringExtra("NAME_KEY");
        int year = i.getIntExtra("YEAR_KEY",0);

        //SET DATA TO TEXTVIEWS
        nameTxt.setText(name);
        yearTxt.setText(String.valueOf(year));
    }
}

3. MyFragment.java

  • Unsere Fragment-Klasse.
  • Wir verwenden die Support-Bibliothek Fragment, also erweitern wir android.support.v4.app.Fragment“.
  • Hier haben wir einen Text, eine Schaltfläche und einen Spinner.
  • Der Benutzer gibt den Namen des Raumfahrzeugs in den Text ein, wählt das Startjahr aus und klickt auf die Schaltfläche "Senden", um die Daten an MainActivity zu senden.
  • Wir senden und verpacken die Daten in einem "Intent".
  • Wir senden auch eine Variable, die wir sender nennen, um den Absender dieser Daten als dieses Fragment zu identifizieren.

package com.tutorials.hp.datafragment_activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;

/
 * A simple Fragment subclass.
 */
public class MyFragment extends Fragment {

    private EditText nameFragTxt;
    private Spinner launchYearSpinner;
    private Button sendBtn;

    public MyFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View rootView=inflater.inflate(R.layout.fragment_my, container, false);

        //INITIALIZE VIEWS
        nameFragTxt = (EditText)rootView.findViewById(R.id.nameEditTxt);
        launchYearSpinner = (Spinner)rootView.findViewById(R.id.sp);
        sendBtn = (Button) rootView.findViewById(R.id.sendBtn);

        fillYears();

        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendData();
            }
        });

        return rootView;
    }
    /*
    FILL YEARS IN OUR SPINNER
    */
    private void fillYears() {
        ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1);
        adapter.add("2017");
        adapter.add("2018");
        adapter.add("2019");
        adapter.add("2020");
        adapter.add("2021");
        adapter.add("2022");

        //SET ADAPTER INSTANCE TO OUR SPINNER
        launchYearSpinner.setAdapter(adapter);

    }

    private void sendData()
    {
        //INTENT OBJ
        Intent i = new Intent(getActivity().getBaseContext(),
                MainActivity.class);

        //PACK DATA
    i.putExtra("SENDER_KEY", "MyFragment");
        i.putExtra("NAME_KEY", nameFragTxt.getText().toString());
        i.putExtra("YEAR_KEY", Integer.valueOf(launchYearSpinner.getSelectedItem().toString()));

        //RESET WIDGETS
        nameFragTxt.setText("");
        launchYearSpinner.setSelection(0);

        //START ACTIVITY
        getActivity().startActivity(i);
    }
}

4. Benutzerschnittstellen erstellen

Benutzeroberflächen werden in Android typischerweise mit XML-Layouts erstellt, im Gegensatz zu direkter Java-Codierung.

Dies ist ein Beispiel für deklarative Programmierung.

Vorteile der Verwendung von XML gegenüber Java
Nr. Vorteil
1. Die deklarative Erstellung von Widgets und Ansichten ermöglicht uns die Verwendung einer deklarativen Sprache XML, was die Arbeit erleichtert.
2. Es ist leicht wartbar, da die Benutzeroberfläche von der Java-Logik entkoppelt ist.
3. Es ist einfacher, Code weiterzugeben oder herunterzuladen und ihn vor der Laufzeit sicher zu testen.
4. Sie können XML-Generierungstools verwenden, um XML zu generieren

Hier sind unsere Layouts für dieses Projekt:

(a). activity_main.xml
  • Dieses Layout wird in die MainActivity-Benutzeroberfläche aufgeblasen.
  • Es enthält die content_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_fitsSystemWindows="true"
    tools_context="com.tutorials.hp.datafragment_activity.MainActivity">

    <android.support.design.widget.AppBarLayout
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android_id="@+id/fab"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="bottom|end"
        android_layout_margin="@dimen/fab_margin"
        app_srcCompat="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

Hier sind einige der Widgets, Ansichten und Ansichtsgruppen, die verwendet werden"

No. View/ViewGroup Package Role
1. CordinatorLayout android.support.design.widget Super-powered framelayout, das unsere Anwendung auf oberster Ebene dekoriert und auch die Interaktionen und Verhaltensweisen aller seiner Kinder festlegt.
2. AppBarLayout android.support.design.widget Ein untergeordnetes LinearLayout, das seine Kinder vertikal anordnet und Material Design App Bar-Konzepte wie Scroll-Gesten bereitstellt.
3. ToolBar <android.support.v7.widget Eine ViewGroup, die Actionbar-Funktionen bietet und dennoch innerhalb von Anwendungslayouts verwendet werden kann.
4. FloatingActionButton android.support.design.widget Eine kreisförmige Bildansicht, die über der Benutzeroberfläche schwebt und als Schaltfläche verwendet werden kann.
(b). content_main.xml

Dieses Layout wird in Ihre activity_main.xml aufgenommen.
Hier definieren wir unsere UI-Widgets.

  • Hauptlayout.
  • Wir spezifizieren hier Views und Widgets xml-Code.
  • Dieses Layout wird in unsere MainActivity-Schnittstelle aufgeblasen.
  • Ist das contentmain.xml Layout in unserem Projekt.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_id="@+id/content_main"
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.datafragment_activity.MainActivity"
    tools_showIn="@layout/activity_main">

    <LinearLayout
        android_layout_width="match_parent"
        android_orientation="vertical"
        android_layout_height="match_parent">

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceLarge"
        android_text="Received Data"
        android_id="@+id/activityTitle"
        android_textStyle="bold"
        android_textColor="@color/colorAccent"
        android_layout_gravity="center_horizontal"
        android_padding="5dp"
        />

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceLarge"
        android_text="Name"
        android_id="@+id/nameTxt"
        android_padding="5dp"
        />

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceLarge"
        android_text="Year"
        android_id="@+id/yearTxt"
        android_padding="5dp"
        />

    <FrameLayout
        android_id="@+id/container"
        android_layout_width="match_parent"
        android_layout_height="wrap_content">

    </FrameLayout>

    </LinearLayout>
</RelativeLayout>

(c). MyFragment Layout

  • Layout für unsere Klasse Fragment.
  • Enthält eine CardView mit einem Edittext und einem Spinner.
  • Ist das fragment_my.xml Layout in unserem Projekt.

<FrameLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context="com.tutorials.hp.datafragment_activity.MyFragment">
    <android.support.v7.widget.CardView
        android_orientation="horizontal"
        android_layout_width="match_parent"

        android_layout_margin="5dp"
        card_view_cardCornerRadius="10dp"
        card_view_cardElevation="5dp"
        android_layout_height="300dp">

        <LinearLayout
            android_orientation="vertical"
            android_layout_width="match_parent"
            android_layout_height="match_parent">
            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="FRAGMENT ONE"
                android_id="@+id/fragTitle"
                android_textStyle="bold"
                android_textColor="@color/colorAccent"
                android_layout_gravity="center_horizontal"
                android_padding="5dp"
                />

            <android.support.design.widget.TextInputLayout
                android_id="@+id/nameLayout"
                android_layout_width="match_parent"
                android_layout_height="wrap_content">

                <EditText
                    android_id="@+id/nameEditTxt"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    android_singleLine="true"
                    android_hint= "Name" />
            </android.support.design.widget.TextInputLayout>

            <LinearLayout
                android_layout_width="match_parent"
                android_orientation="horizontal"
                android_layout_height="wrap_content">
                <TextView
                    android_text="LAUNCH YEAR : "
                    android_textColor="@color/colorAccent"
                    android_layout_width="wrap_content"
                    android_layout_height="wrap_content" />
                <Spinner
                    android_id="@+id/sp"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    />
            </LinearLayout>

            <Button
                android_id="@+id/sendBtn"
        android_text="Send"
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"             />
        </LinearLayout>
    </android.support.v7.widget.CardView>
</FrameLayout>

How To Run

  • Laden Sie das obige Projekt herunter.
  • Sie erhalten eine gezippte Datei, entpacken Sie diese.
  • Öffnen Sie das Android Studio.
  • Schließen Sie nun ein bereits geöffnetes Projekt.
  • Klicken Sie in der Menüleiste auf Datei >Neu> Projekt importieren.
  • Wählen Sie nun einen Zielordner, aus dem Sie das Projekt importieren möchten.
  • Wählen Sie ein Android-Projekt aus.
  • Klicken Sie nun auf "OK".
  • Fertig, Sie haben das Projekt importiert und können es jetzt bearbeiten.

Ergebnis

Sie erhalten folgendes Ergebnis:

Wie man Daten von <code>Fragment</code> an <code>Aktivität</code> weitergibt

Weitere Ressourcen

Ressource Link
GitHub Browse Browse
GitHub Download Link Download

Beispiel 2: Android Data Passing – Von Activity zu Fragment via Bundle

Wenn man eine Anwendung entwickelt, die keine Hello World ist, dann ist die Wahrscheinlichkeit groß, dass man mehr als eine Activity oder Fragmente braucht.Fragmente sind im Grunde genommen Unteraktivitäten.

Die meisten Neulinge kommen mit der Übergabe von Daten zwischen Activities oder zwischen Fragmenten durcheinander.

Heute wollen wir sehen, wie man Daten von einer Activity an ein Fragment weitergibt. Wir verwenden ein Bundle Objekt, packen Daten in unsere Activity und entpacken diese Daten dann in der onCreateView() Methode unseres Fragments.

STEP 1 : Projekt erstellen

  1. Erstellen Sie zunächst ein neues Projekt in android studio. Gehe zu File –> New Project.
  2. Geben Sie den Anwendungsnamen ein und wählen Sie den Firmennamen.
  3. Wählen Sie Minimum SDK.
  4. Wählen Sie Empty oder Basic Activity.
  5. Klicken Sie auf Finish.

SCHRITT 2: Unsere Build.gradle

  • Wir werden eine CardView in unserem Fragment verwenden. Es werden keine externen Abhängigkeiten benötigt.

SCHRITT 3: Unser Fragment

  • soll aus unserem Fragment-Layout aufgeblasen werden.
  • Wir empfangen einfach die von MainActivity gesendeten Daten und zeigen sie in unseren Ansichten innerhalb unseres "Fragments".
  • Wir entpacken die Daten in unserer onCreateView() Methode.

package com.tutorials.hp.dataactivity_fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyFragment extends Fragment {

    private TextView nameFragTxt,yearFragTxt;

    public MyFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView=inflater.inflate(R.layout.fragment_my, container, false);

        nameFragTxt= (TextView) rootView.findViewById(R.id.nameTxt);
        yearFragTxt= (TextView) rootView.findViewById(R.id.yearTxt);

        //UNPACK OUR DATA FROM OUR BUNDLE
        String name=this.getArguments().getString("NAME_KEY").toString();
        int year=this.getArguments().getInt("YEAR_KEY");

       nameFragTxt.setText("NAME : "+name);
       yearFragTxt.setText("YEAR : "+String.valueOf(year));

        return rootView;
    }

}

STEP 4 : Unsere MainActivity

  • Wird von unserer contentmain.xml aufgeblasen.
  • Wenn der Benutzer auf den Floating Action Button klickt, packen wir die Daten, die der Benutzer in edittext und spinner eingegeben hat, in ein Bundle Objekt.
  • Wir führen dann unsere "Fragment"-Transaktion durch und ersetzen unseren Framelayout-Container durch unser aufgeblasenes "Fragment".
  • Wir senden das Bundle an das Fragment.

package com.tutorials.hp.dataactivity_fragment;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

public class MainActivity extends AppCompatActivity {
    private EditText nameTxt;
    private Spinner launchYearSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //INITIALIZE VIEWS
        nameTxt = (EditText) findViewById(R.id.nameEditTxt);
        launchYearSpinner = (Spinner) findViewById(R.id.sp);

        fillYears();

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendData();
            }
        });
    }

    /*
    SEND DATA TO FRAGMENT
     */
    private void sendData() {
        //PACK DATA IN A BUNDLE
        Bundle bundle = new Bundle();
        bundle.putString("NAME_KEY", nameTxt.getText().toString());
        bundle.putInt("YEAR_KEY", Integer.valueOf(launchYearSpinner.getSelectedItem().toString()));

        //PASS OVER THE BUNDLE TO OUR FRAGMENT
        MyFragment myFragment = new MyFragment();
        myFragment.setArguments(bundle);

        nameTxt.setText("");
        launchYearSpinner.setSelection(0);

        //THEN NOW SHOW OUR FRAGMENT
        getSupportFragmentManager().beginTransaction().replace(R.id.container,myFragment).commit();

    }

    /*
    FILL YEARS IN OUR SPINNER
     */
    private void fillYears() {
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
        adapter.add("2017");
        adapter.add("2018");
        adapter.add("2019");
        adapter.add("2020");
        adapter.add("2021");
        adapter.add("2022");

        //SET ADAPTER INSTANCE TO OUR SPINNER
        launchYearSpinner.setAdapter(adapter);
    }
}

SCHRITT 5. Benutzeroberfläche Activity erstellen

Benutzeroberflächen werden in Android typischerweise mit XML-Layouts erstellt, im Gegensatz zu direkter Java-Codierung.

Dies ist ein Beispiel für deklarative Programmierung.

Vorteile der Verwendung von XML gegenüber Java

Nr. Vorteil
1. die deklarative Erstellung von Widgets und Ansichten ermöglicht uns die Verwendung einer deklarativen Sprache, XML, die es einfacher macht.
2. Es ist leicht wartbar, da die Benutzeroberfläche von der Java-Logik entkoppelt ist.
3. Es ist einfacher, Code weiterzugeben oder herunterzuladen und ihn vor der Laufzeit sicher zu testen.
4. Sie können Tools zur XML-Generierung verwenden, um XML zu generieren.

Hier sind unsere Layouts für dieses Projekt:

(a). activity_main.xml
  • Dieses Layout wird zur MainActivity-Benutzeroberfläche aufgeblasen.
  • Es enthält die Datei content_main.xml.

Hier sind einige der Widgets, Ansichten und Viewgroups, die verwendet werden"

No. View/ViewGroup Package Role
1. CordinatorLayout android.support.design.widget Super-powered framelayout, das die oberste Ebene unserer Anwendung dekoriert und auch die Interaktionen und das Verhalten aller seiner Kinder festlegt.
2. AppBarLayout android.support.design.widget Ein LinearLayout-Kind, das seine Kinder vertikal anordnet und Material Design App Bar-Konzepte wie Scroll-Gesten bietet.
3. ToolBar <android.support.v7.widget Eine ViewGroup, die Actionbar-Funktionen bietet und dennoch innerhalb von Anwendungslayouts verwendet werden kann.
4. FloatingActionButton android.support.design.widget Eine kreisförmige Bildansicht, die über der Benutzeroberfläche schwebt und als Schaltfläche verwendet werden kann.
(b). content_main.xml

Dieses Layout wird in Ihre activity_main.xml aufgenommen.
Hier definieren wir unsere UI-Widgets.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.dataactivity_fragment.MainActivity"
    tools_showIn="@layout/activity_main">

    <LinearLayout
        android_layout_width="match_parent"
        android_orientation="vertical"
        android_layout_height="match_parent">

        <android.support.design.widget.TextInputLayout
            android_id="@+id/nameLayout"
            android_layout_width="match_parent"
            android_layout_height="wrap_content">

            <EditText
                android_id="@+id/nameEditTxt"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_singleLine="true"
                android_hint= "Name" />
        </android.support.design.widget.TextInputLayout>

    <LinearLayout
        android_layout_width="match_parent"
        android_orientation="horizontal"
        android_layout_height="wrap_content">
        <TextView
            android_text="LAUNCH YEAR : "
            android_textColor="@color/colorAccent"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content" />
        <Spinner
            android_id="@+id/sp"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            />
        </LinearLayout>
        <FrameLayout
            android_id="@+id/container"
            android_layout_width="match_parent"
            android_layout_height="wrap_content">
        </FrameLayout>
    </LinearLayout>
</RelativeLayout>

SCHRITT 6: Unser Fragment xml

  • Unser Fragment Layout.
  • Soll eine CardView mit Textviews enthalten.

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context="com.tutorials.hp.dataactivity_fragment.MyFragment">

    <android.support.v7.widget.CardView
        android_orientation="horizontal"
        android_layout_width="match_parent"

        android_layout_margin="5dp"
        card_view_cardCornerRadius="10dp"
        card_view_cardElevation="5dp"
        android_layout_height="300dp">

        <LinearLayout
            android_orientation="vertical"
            android_layout_width="match_parent"
            android_layout_height="match_parent">

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="FRAGMENT ONE"
                android_id="@+id/fragTitle"
                android_textStyle="bold"
                android_textColor="@color/colorAccent"
                android_layout_gravity="center_horizontal"
                android_padding="5dp"
                 />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="Name"
                android_id="@+id/nameTxt"
                android_padding="5dp"
                />

            <TextView
                android_layout_width="wrap_content"
                android_layout_height="wrap_content"
                android_textAppearance="?android:attr/textAppearanceLarge"
                android_text="Year"
                android_id="@+id/yearTxt"
                android_padding="5dp"
                />

        </LinearLayout>
    </android.support.v7.widget.CardView>

</RelativeLayout>

SCHRITT 7 : Wie man es ausführt

  • Laden Sie das Projekt herunter.
  • Du erhältst eine gezippte Datei, entpacke sie.
  • Öffnen Sie das Android Studio.
  • Schließen Sie nun ein bereits geöffnetes Projekt.
  • Klicken Sie in der Menüleiste auf Datei >Neu> Projekt importieren.
  • Wählen Sie nun einen Zielordner, aus dem Sie das Projekt importieren möchten.
  • Wählen Sie ein Android-Projekt aus.
  • Klicken Sie nun auf "OK".
  • Fertig, jetzt bearbeiten.

Ergebnis

Sie erhalten folgendes Ergebnis:

How to Pass Data from <code>Activity</code> to <code>Fragment</code>

SCHRITT 8: Mehr

Ressource Link
GitHub Durchsuchen Durchsuchen
GitHub Download Link Download

Android Datenübergabe: ListView zu ListView

Manchmal möchte man Daten von einem ListView in Activity A an einen ListView in Activity B übergeben. Das ist der Zweck dieses Tutorials.

Wir werden zwei Activities haben, jede mit einer ListView. Wir klicken auf einen Button und übergeben Daten von der ersten Activity an die zweite Activity, die erste Listenansicht an die zweite Listenansicht.

Gradle-Skripte

Ändern wir unsere build.gradle Datei auf App-Ebene.

1. Build.gradle

  • Wir spezifizieren Abhängigkeiten unter der dependencies closure.

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"
        defaultConfig {
            applicationId "com.tutorials.hp.listviewdatapassing"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:25.2.0'
        compile 'com.android.support:design:25.2.0'
        testCompile 'junit:junit:4.12'
    }

LAYOUTS

Wir werden drei Layouts haben:

1. activity_main.xml

  • Dieses Layout wird in die Benutzeroberfläche für unsere Hauptaktivität eingefügt.
  • Es enthält das Layout content_main.xml.
  • Es enthält unsere Definitionen für die Anwendungsleiste und die Symbolleiste.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout

        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_fitsSystemWindows="true"
        tools_context="com.tutorials.hp.listviewdatapassing.MainActivity">

        <android.support.design.widget.AppBarLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android_id="@+id/toolbar"
                android_layout_width="match_parent"
                android_layout_height="?attr/actionBarSize"
                android_background="?attr/colorPrimary"
                app_popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_main" />

        <android.support.design.widget.FloatingActionButton
            android_id="@+id/fab"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom|end"
            android_layout_margin="@dimen/fab_margin"
            app_srcCompat="@android:drawable/ic_dialog_email" />

    </android.support.design.widget.CoordinatorLayout>

2. content_main.xml

  • Dies wird unsere erste ListView enthalten.
  • Dieses Layout wird in die activity_main.xml eingebunden.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        android_id="@+id/content_main"
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_paddingBottom="@dimen/activity_vertical_margin"
        android_paddingLeft="@dimen/activity_horizontal_margin"
        android_paddingRight="@dimen/activity_horizontal_margin"
        android_paddingTop="@dimen/activity_vertical_margin"
        app_layout_behavior="@string/appbar_scrolling_view_behavior"
        tools_context="com.tutorials.hp.listviewdatapassing.MainActivity"
        tools_showIn="@layout/activity_main">

        <ListView
            android_id="@+id/firstLV"
            android_layout_width="match_parent"
            android_layout_height="wrap_content" />
    </RelativeLayout>

3. activity_second.xml

  • Dieses Layout wird in die Benutzeroberfläche für unsere zweite Activity eingefügt.
  • Es wird die zweite Aktivität enthalten.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        android_id="@+id/activity_second"
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_paddingBottom="@dimen/activity_vertical_margin"
        android_paddingLeft="@dimen/activity_horizontal_margin"
        android_paddingRight="@dimen/activity_horizontal_margin"
        android_paddingTop="@dimen/activity_vertical_margin"
        tools_context="com.tutorials.hp.listviewdatapassing.SecondActivity">
        <ListView
            android_id="@+id/secondLV"
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            />
    </RelativeLayout>

JAVA-KLASSEN

Hier sind unsere JAVA-Klassen:

1. SpacecraftsCollection

  • Diese Klasse wird uns helfen, unsere ArrayList von der ersten zur zweiten Activity zu transferieren. Diese Klasse wird serialisiert, übertragen und dann in der zweiten Activity deserialisiert

    package com.tutorials.hp.listviewdatapassing;

    import java.io.Serializable;
    import java.util.ArrayList;

    public class SpacecraftsCollection implements Serializable {

        private ArrayList<String> spacecrafts;

        public ArrayList<String> getSpacecrafts() {
            return spacecrafts;
        }

        public void setSpacecrafts(ArrayList<String> spacecrafts) {
            this.spacecrafts = spacecrafts;
        }
    }

2. SecondActivity.java

  • Dies ist unsere zweite Activity-Klasse.
  • Sie empfängt eine serialisierte Arrayliste mit unseren Raumschiffen, deserialisiert sie und zeigt sie in der zweiten Listenansicht an.

    package com.tutorials.hp.listviewdatapassing;

    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    public class SecondActivity extends AppCompatActivity {

        //SECOND LISTVIEW
        ListView lv;

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

            lv= (ListView) findViewById(R.id.secondLV);

            receiveData();
        }

        /*
        RECEIVE DATA FROM FIRST ACTIVITY
         */
        private void receiveData()
        {
            Intent i=this.getIntent();
            SpacecraftsCollection spacecraftsCollection= (SpacecraftsCollection) i.getSerializableExtra("SPACECRAFTS");

            lv.setAdapter(new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,spacecraftsCollection.getSpacecrafts()));
        }
    }

3. MainActivity.java

  • Unsere MainActivity-Klasse.
  • Unsere Arraylistendaten werden von hier aus an die zweite Activity übertragen, wenn der schwebende Aktionsknopf angeklickt wird.

    package com.tutorials.hp.listviewdatapassing;

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;

    import java.util.ArrayList;

    public class MainActivity extends AppCompatActivity {

        //FIRST LISTVIEW
        ListView lv;
        ArrayList spacecrafts=new ArrayList();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            lv= (ListView) findViewById(R.id.firstLV);
            populateData();
            lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,spacecrafts));

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,new ArrayList<String>()));
                    sendData();
                }
            });
        }

        //POPULATE SPACECRAFTS ARRAYLIST
        private void populateData()
        {
            spacecrafts.add("Casini");
            spacecrafts.add("Enterprise");
            spacecrafts.add("Spitzer");
            spacecrafts.add("Huygens");
            spacecrafts.add("WMAP");
            spacecrafts.add("Juno");
            spacecrafts.add("Kepler");
            spacecrafts.add("Apollo 15");
            spacecrafts.add("Challenger");
            spacecrafts.add("Discovery");
        }

        /*
        SET ARRAYLIST TO SPACECRAFTS COLLECTION CLASS
         */
        private SpacecraftsCollection getData()
        {
            SpacecraftsCollection spacecraftsCollection=new SpacecraftsCollection();
            spacecraftsCollection.setSpacecrafts(spacecrafts);

            return spacecraftsCollection;
        }

        /*
        SEND DATA TO SECOND ACTIVITY
         */
        private void sendData()
        {
            Intent i=new Intent(this,SecondActivity.class);
            i.putExtra("SPACECRAFTS",this.getData());
            startActivity(i);
        }
    }

Ergebnis

Das ist das Ergebnis, wenn Sie das Projekt ausführen:

How to Pass Data From ListView to ListView

Download

Code herunterladen hier.