Hoe start ik een activiteit vanuit een fragment?

Ik heb een set tabbladen in een FragmentActivitydie elk hun eigen fragment bevatten. Toen ik probeerde een nieuwe activiteit te starten vanuit dat fragment via een onClickListener, en met behulp van de startActivity(myIntent)-methode, werd mijn toepassingskracht gesloten.

Na een tijdje rondgekeken te hebben, vond ik een paar verwijzingen naar een methode genaamd startActivityFromFragment, maar na ongeveer een uur zoeken kan ik geen uitleg of voorbeelden vinden van hoe gebruiken of dat dit is wat ik zou moeten gebruiken.

Ik vraag me af of er een verschil is tussen het starten van een nieuwe activiteit vanuit een activiteit en het starten van een nieuwe activiteit vanuit een fragment, en zo ja, wat moet ik implementeren?


Antwoord 1, autoriteit 100%

Je moet het doen met getActivity().startActivity(myIntent)


Antwoord 2, autoriteit 90%

Ik heb het gedaan, onderstaande code werkt voor mij….

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.hello_world, container, false);
        Button newPage = (Button)v.findViewById(R.id.click);
        newPage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), HomeActivity.class);
                startActivity(intent);
            }
        });
        return v;
    }

en zorg ervoor dat uw bestemmingsactiviteit moet worden geregistreerd in het Manifest.xml-bestand,

maar in mijn geval worden niet alle tabbladen weergegeven in HomeActivity, is daar een oplossing voor?


Antwoord 3, autoriteit 26%

Het verschil tussen het starten van een activiteit vanuit een fragment en een activiteit is hoe je de context krijgt, want in beide gevallen moet het een activiteit zijn.

Van een activiteit:
De context is de huidige activiteit (this)

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);

Van een fragment:
De context is de bovenliggende activiteit (getActivity()). Merk op dat het fragment zelf de activiteit kan starten via startActivity(), dit hoeft niet vanuit de activiteit te gebeuren.

Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);

Antwoord 4, autoriteit 12%

Ik doe het als volgt, om de SendFreeTextActivity te starten vanuit een (aangepast) menufragment dat in meerdere activiteiten verschijnt:

In de klasse MenuFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container, false);
    final Button sendFreeTextButton = (Button) view.findViewById(R.id.sendFreeTextButton);
    sendFreeTextButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TAG, "sendFreeTextButton clicked");
            Intent intent = new Intent(getActivity(), SendFreeTextActivity.class);
            MenuFragment.this.startActivity(intent);
        }
    });
    ...

Antwoord 5, autoriteit 2%

Gebruik de basiscontext van de activiteit waarin je fragment zich bevindt om een ​​intentie te starten.

Intent j = new Intent(fBaseCtx, NewactivityName.class);         
startActivity(j);

waar fBaseCtxBaseContextis van uw huidige activiteit.
Je kunt het krijgen als fBaseCtx = getBaseContext();

Other episodes