How can one Fragment call another Fragment?

Asked

Viewed 2,044 times

3

I have an app with a screen and on this screen there is a Fragment. In this event there is a button that, when clicked, I want to call another Ragment and that stays/replaces the Ragment button. I’ve been trying some stuff I’ve seen on the web and I’m not getting it.

Reload Screen

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.gustavo.easypasse.RecargaActivity"
tools:showIn="@layout/activity_recarga">

<LinearLayout
    android:id="@+id/linearLayout11"
    android:layout_width="0dp"
    android:layout_height="25dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:background="@android:color/black"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Valor da recarga"
        android:textColor="@android:color/background_light" />

    <EditText
        android:id="@+id/edtValorRecarga"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/holo_blue_dark"
        android:ems="10"
        android:inputType="textPersonName" />
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout12"
    android:layout_width="0dp"
    android:layout_height="25dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:background="@android:color/black"
    android:orientation="horizontal"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout11">

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="CPF"
        android:textColor="@android:color/background_light" />

    <EditText
        android:id="@+id/edtCPF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="9dp"
        android:layout_weight="1"
        android:background="@android:color/holo_blue_dark"
        android:ems="10"
        android:inputType="textPersonName" />
</LinearLayout>

<LinearLayout
    android:id="@+id/llContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/black"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout12">

    <include
        android:id="@+id/includeCartaoCreditoDebito"
        layout="@layout/fragment_cartao_boleto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout8"
    android:layout_width="0dp"
    android:layout_height="25dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="168dp"
    android:orientation="horizontal"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/llContainer">

    <TextView
        android:id="@+id/textView10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Saldo disponível"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />

    <TextView
        android:id="@+id/textView11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Saldo gasto"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />
</LinearLayout>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="35dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:orientation="horizontal"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout8"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:id="@+id/linearLayout9">

    <TextView
        android:id="@+id/tvValorSaldoDisponivel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="R$ 850,00"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="24sp" />

    <TextView
        android:id="@+id/tvValorSaldoGasto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="R$ 125,00"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="24sp" />
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout10"
    android:layout_width="0dp"
    android:layout_height="25dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="12dp"
    android:orientation="horizontal"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout9">

    <TextView
        android:id="@+id/textView14"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Data renovar recarga"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />

    <TextView
        android:id="@+id/textView15"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Transferência de saldo"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout15"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:orientation="horizontal"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout10"
    app:layout_constraintVertical_bias="0.0">

    <TextView
        android:id="@+id/tvDataRenovarRecarga"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="18/10/2017"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="24sp" />

    <TextView
        android:id="@+id/tvValorTransSaldo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="-R$ 25,00"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="24sp" />
</LinearLayout>

1Fragment

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.gustavo.easypasse.CartaoBoletoFragment">

<!-- TODO: Update blank fragment layout -->
<LinearLayout
    android:id="@+id/linearLayout13"
    android:layout_width="match_parent"
    android:layout_height="25dp"
    android:layout_marginEnd="0dp"
    android:layout_marginLeft="0dp"
    android:layout_marginRight="0dp"
    android:layout_marginStart="0dp"
    android:layout_marginTop="0dp"
    android:background="@android:color/black"
    android:orientation="horizontal"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout12">

    <TextView
        android:id="@+id/textView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="FORMA DE PAGAMENTO"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />
</LinearLayout>

<LinearLayout
    android:id="@+id/linearLayout14"
    android:layout_width="wrap_content"
    android:layout_height="25dp"
    android:layout_marginTop="25dp"
    android:background="@android:color/black"
    android:orientation="horizontal"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/linearLayout13">

    <TextView
        android:id="@+id/textView13"
        android:layout_width="225dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.98"
        android:text="Cartão de crédito/débito"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />

    <TextView
        android:id="@+id/textView16"
        android:layout_width="230dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Boleto bancário"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />

</LinearLayout>

<LinearLayout
    android:id="@+id/LinearLayoutCartaoBoleto"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_marginTop="50dp"
    android:background="@android:color/black"
    android:orientation="horizontal">

    <ImageButton
        android:id="@+id/ibCartaoCredito"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/black"
        android:onClick="cartaoCreditoDebito"
        android:src="@drawable/cartao_de_credito_01" />

    <ImageButton
        android:id="@+id/ibBoleto"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/black"
        android:src="@drawable/boleto_bancario_01" />
</LinearLayout>

2Fragment

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_cartao"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.gustavo.easypasse.CartaoCreditoFragment">

<!-- TODO: Update blank fragment layout -->

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView12"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:background="@android:color/black"
        android:text="FORMA DE PAGAMENTO"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />

    <TextView
        android:id="@+id/textView18"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:background="@android:color/black"
        android:text="Cartão de Crédito/Débito"
        android:textAlignment="center"
        android:textColor="@android:color/background_light" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/black"
        android:src="@drawable/cartao_de_credito_01" />

</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="140dp"
    android:orientation="vertical">

</LinearLayout>

Activity of the Recharge Screen

public class RecargaActivity extends AppCompatActivity {

private EditText valorRecarga;
private EditText cpf;
private ImageButton boleto;
private TextView saldoDisponivel;
private TextView saldoGasto;
private TextView renovarRecarga;
private TextView transSaldo;

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

    valorRecarga = (EditText) findViewById(R.id.edtValorRecarga);
    cpf = (EditText) findViewById(R.id.edtCpf);

    saldoDisponivel = (TextView) findViewById(R.id.tvValorSaldoDisponivel);
    saldoGasto = (TextView) findViewById(R.id.tvValorSaldoGasto);
    renovarRecarga = (TextView) findViewById(R.id.tvDataRenovarRecarga);
    transSaldo = (TextView) findViewById(R.id.tvValorTransSaldo);

}

}

Activity of Fragment called

public class CartaoCreditoFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

private OnFragmentInteractionListener mListener;

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

// TODO: Rename and change types and number of parameters
public static CartaoCreditoFragment newInstance(String param1, String param2) {
    CartaoCreditoFragment fragment = new CartaoCreditoFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_cartao_credito, container, false);

    final ImageButton cartaoCreditoDebito = (ImageButton) v.findViewById(R.id.ibCartaoCredito);

    cartaoCreditoDebito.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CartaoCreditoFragment cartaoCreditoFragment =  new CartaoCreditoFragment();
            FragmentManager manager = getFragmentManager();
            manager.beginTransaction()
                    //.replace(R.id.llContainer, new CartaoCreditoFragment()).commit();
                    .replace(R.id.includeCartaoCreditoDebito, new CartaoCreditoFragment()).commit();
        }
    });

    return v;

}

// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);

}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

}

}

  • No use using a Tabbed Activity?

  • I do not know is possible to change from fragment to fragment but I believe that this is not a good practice. A suggestion would be in your XML, fragment, call a function that is in the main view RecargaActivity something like public void didClickChangeCard(View view) and in this function you should change fragment after all the activity, Activity, who should have this responsibility to manage the view.

2 answers

1

It’s very simple!

Inside the "onClick" method of the button used to call another fragment do the following:

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();

FrgmentTransaction fragmentTransaction = fragmentManager.beginTransacition();

fragmentTransaction.replace(R.id.fragmentContainer, new Fragment2()).commit();

Note that "R.id.fragmentContainer" is the name of the frameLayout that is contained in your xlm file and contains its fragments and "Fragment2()" is the class of the new fragment you want to start.

I hope this helps you. Good luck!

0

  1. Your Activity must have one <fragment>:
      <fragment
         android:id="@+id/
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
  1. Try it this way:
/**
 * Informe a Activity onde está localizado o fragmnet container, 
 * O Fragment que será exibido.
 * O nome da Fragment
 **/
    public static final void abrir(final SuaActivity mActivity, final Fragment mFragment, final String name) {
        if (null == mActivity || null == mFragment) {
            return;
        }
        final FragmentManager _manager = mActivity.getFragmentManager();
        final FragmentTransaction _transaction = _manager.beginTransaction();
        _transaction.add(R.id.container, mFragment, name);
        /**
         * Adiciona à pilha!
         * Isso significa que a transação será lembrada depois que ela for comprometida e irá reverter sua operação quando mais tarde sair da pilha.
         */
        _transaction.addToBackStack(name);
    }
  • What a terrible way this 2a. kkkkk option

  • Why do you think it’s terrible? Can you comment / answer about it? This way we can exchange experiences and views ! So we all learned together, being this the goal of this site! =)

  • @Thiagoluizdomacoski the first option does not create a static fragment that cannot be replaced by code?

  • Its static function ta within the fragment or activity ? This response takes into account that all fragments are loaded with static at once on the screen ?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.