Samstag, Juni 6, 2020

Öffnen Sie Das Fragment Aus Der Tätigkeit

Im arbeiten auf einer kleinen google-maps-app, die ermöglicht es Benutzern finden Sie Orte in der Nähe zu Ihnen, möchte ich hinzufügen, dass Funktionalität, die ermöglicht dem Benutzer, fügen Sie einen Ort, um die Liste der Favoriten, So weit ive erstellten Klassen, die dies können die Funktionalität.

Meine Haupttätigkeit ist meine Homepage, die öffnet sich anderen Aktivitäten, folgenden code:

 import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;

public class MainActivity extends AppCompatActivity {

    ImageButton btnNearBy;
    ImageButton btnFavourites;


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

        btnNearBy = (ImageButton) findViewById(R.id.btnNearby);
        btnNearBy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mapIntent = new Intent(getBaseContext(), MapsActivity.class);
                startActivity(mapIntent);
            }
        });

        btnFavourites = (ImageButton) findViewById(R.id.btnFavourites);
        btnFavourites.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager fragmentManager = MainActivity.this.getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                FavouriteListFragment fragment = new FavouriteListFragment();
                fragmentTransaction.add(R.id.fragment_container, fragment); //ERROR ON THIS LINE
                fragmentTransaction.commit();
            }
        });

    }
}

Ive erstellt eine Schaltfläche, die das öffnen sollte das fragment, das hält die Liste der Favoriten ,Mein fragment erklärt wird, wie diese:
public class FavouriteListFragment extends Fragment { ... }

Ich bin etwas unsicher, wie man öffnen Sie das fragment aus der MainActivity beim klicken auf eine Schaltfläche.
Irgendwelche Ideen?
Danke!

zuerst müssen Sie ein fragment-container in Ihrer xml-Datei können Sie dann @Rohit Antwort für den rest
Wäre das in meiner MainActivity xml-Datei?

InformationsquelleAutor T91 | 2016-04-12

2 Kommentare

  1. 3

    Gibt es zwei Möglichkeiten der Anzeige Fragmente:

    1 – Zuerst müssen Sie definieren, ein fragment-container in Ihrem code wie folgt:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/main_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
         <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="do something" 
            android:onClick="openFragment" />
         <FrameLayout
             android:id="@+id/fragment_container"
             android:layout_height="wrap_content"
             android:layout_width="match_content" />
    </LinearLayout>

    und dann müssen Sie erstellen Sie eine Funktion namens openFragment in Ihrer Aktivität und verwenden Sie den folgenden code in openFragment:

    getSupportFragmentManager().beginTransaction().add(R.id_fragment_container,new FavouriteListFragment()).commit();

    2 – definieren Sie das fragment in Ihrer Aktivität xml-Datei wie:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/my_fragment"
        android:name="com.example.android.something.FavouriteListFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.android.something.FavouriteListFragment"
        tools:layout="@android:layout/fragment_layout" />

    Die erste ist die sogenannte dynamische fragment der Schöpfung und die zweite ist statisch. Sie haben mehr Freiheit, mit der erste, aber wenn Ihr fragment ändert sich nicht während der Aktivität ist es einfacher zu verwenden ist die zweite

    Danke für die Antwort. Würde das fragment ersetzen die Haupttätigkeit als würde ich nicht sehen wollen, dass beim öffnen der Liste.
    fragment wird nie ersetzen Sie Ihre Aktivität, sondern findet in einer Ansicht innerhalb einer Aktivität. Wenn Sie das gewünschte layout aus, das fragment zu besetzen, ist die übergeordnete Sicht, dann ja, es nimmt deine ganze Sicht. aber wenn das layout hat zum Beispiel 4 Ansichten können Sie verwenden Sie einfach den Blick für das fragment und der rest bleibt für Ihre Tätigkeit Haupt-layout
    wenn man verstehen will, das Verhalten besser, ich schlage vor, führen Sie einige tests mit verschiedenen layouts zu sehen, wie es funktioniert
    Ah okay, also in diesem Fall das fragment wird in der Haupttätigkeit?
    in diesen Fällen, die ich zeigte, ja

    InformationsquelleAutor Pooya

  2. 3

    Da Sie über android.support.v4.app.Fragment und es hat eine Menge Verwirrung in den Import-korrekte version. Versuchen Sie es so:

    android.support.v4.app.FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    
    FavouriteListFragment fragment = new FavouriteListFragment();
    
    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();

    Wo fragment_container ist FrameLayout innen activity_main.

    <FrameLayout
      android:id="@+id/fragment_container"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
    </FrameLayout>

    Referenz

    Ich habe nichts mit der id von fragment-container. Wo würde ich erstellen?
    in activity_main es sollte ein FrameLayout.
    Es sagt cannot resolve method add für die fragmentTransaction.add(R.id.fragment_container, fragment); line
    Die FragmentManager verwenden Sie? versuchen Sie zu wechseln.
    schauen Sie auf meine aktualisierte Antwort. Ich habe ausdrücklich Hinzugefügt, die fragmentManager zu verwenden.

    InformationsquelleAutor Rohit Arya

Kostenlose Online-Tests