Firefog Firefog - 22 days ago 6
Android Question

How to open a Fragment on button click from a fragment in Android

I have some button on my HomeFragment i want to to open a Fragment on button click from a fragment . Something like Navigation. I am trying with bellow code but did not worked. Please help ! I am very new to android and trying to learn new things.

Here is My code

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class HomeFragment extends Fragment {

public HomeFragment(){}



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

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

Button aboutBtn = (Button) rootView.findViewById(R.id.aboutusButton);
Button phonebookBtn = (Button) rootView.findViewById(R.id.phbookButton);
Button schemeBtn = (Button) rootView.findViewById(R.id.schemeButton);
Button loanBtn = (Button) rootView.findViewById(R.id.loanButton);
Button serviceBtn = (Button) rootView.findViewById(R.id.serviceButton);
Button devBtn = (Button) rootView.findViewById(R.id.devButton);

aboutBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
// Launching new Activity on selecting single List Item
Intent i = new Intent(getActivity(), AboutFragment.class);
startActivity(i);
}
});

phonebookBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
// Launching new Activity on selecting single List Item
Intent j = new Intent(getActivity(), PhoneBookFragment.class);
startActivity(j);
}
});

schemeBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
// Launching new Activity on selecting single List Item
Intent k = new Intent(getActivity(), HomeFragment.class);
startActivity(k);
}
});

loanBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
// Launching new Activity on selecting single List Item
Intent l = new Intent(getActivity(), RemittanceFragment.class);
startActivity(l);
}
});

serviceBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
// Launching new Activity on selecting single List Item
Intent m = new Intent(getActivity(), ServiceFragment.class);
startActivity(m);
}
});

devBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
// Launching new Activity on selecting single List Item
Intent n = new Intent(getActivity(), AboutDeveloper.class);
startActivity(n);
}
});


return rootView;
}
}


I am looking for something like bellow code but don't know how to make the code works with my code.

Button aboutBtn = (Button) v.findViewById(R.id.aboutButton);
aboutBtn.setOnClickListener(this);

Button homeBtn = (Button) v.findViewById(R.id.homeButton);
homeButton.setOnClickListener(this);

Button serviceBtn = (Button) v.findViewById(R.id.serviceButton);
serviceBtn.setOnClickListener(this);

@Override
public void onClick(View view) {
Fragment fragment = null;
switch (view.getId()) {
case aboutButton:
fragment = new AboutFragment();
break;

case homeBtn:
fragment = new PhonebookFragment();
break;

case serviceBtn:
fragment = new ServiceFragment();
break;

default:
fragment = new HomeFragment();
break;

}
}

Answer Source

You can replace the fragment using FragmentTransaction on button click. Something like this:

  Fragment someFragment = new SomeFragment(); 
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, someFragment ); // give your fragment container id in first parameter
    transaction.addToBackStack(null);  // if written, this transaction will be added to backstack
    transaction.commit(); 

Learn about performing fragment transactions here.

code:

  package com.rupomkhondaker.sonalibank;

import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class HomeFragment extends Fragment implements View.OnClickListener {

    public HomeFragment() {
    }

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

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

        Button aboutBtn = (Button) rootView.findViewById(R.id.aboutusButton);
        Button phonebookBtn = (Button) rootView.findViewById(R.id.phbookButton);

        aboutBtn.setOnClickListener(this);
        phonebookBtn.setOnClickListener(this);


        return rootView;
    }

    @Override
    public void onClick(View view) {
        Fragment fragment = null;
        switch (view.getId()) {
            case R.id.aboutusButton:
                fragment = new AboutFragment();
                replaceFragment(fragment);
                break;

            case R.id.phbookButton:
                fragment = new PhoneBookFragment();
                replaceFragment(fragment);
                break;
        }
    }

    public void replaceFragment(Fragment someFragment) {
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_container, someFragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }


}