Rendimiento Variable De fragmento a fragmento

Ilya Tarasov:

Quiero volver variable a partir del fragmento actual Fragmento anterior haciendo clic en el botón con la interfaz. No puedo volver variable de un fragmento se extendía desde la clase Fragmento de otro fragmento se extendía desde la clase Fragmento.

Pero puedo volver variable a partir de DialogFragment del fragmento con el mismo método de transferencia a través de la interfaz.

En MainActivity I FirstFragment de carga:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new FirstFragment()).commit();

En la clase FirstFragment onClick TextView tvSecondFragment creo Fragmento:

class FirstFragment extends Fragment implements SecondFragment.SecondFragmentListener {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.first_fragment, container, false);

        tvSecondFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment fragment = new SecondFragment();
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.add(R.id.fragment_container, fragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();

            }
        });

return view;
}

    @Override
    public void sentAge(String input) {
        Log.d(TAG, "method sentAge called with variable: " + input);
    }

}

Esta es la clase SecondFragment donde trato de devolver el botón onClick variables:

public class SecondFragment extends Fragment {
    private SecondFragmentListener listener;
    public interface SecondFragmentListener {
        public void sentAge(String input);
    }

    private EditText editText;
    private Button button;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.second_fragment, container, false);

        editText = view.findViewById(R.id.et_age);
        button = view.findViewById(R.id.btn_transfer_age);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(), "Button Pressed", Toast.LENGTH_SHORT).show();
                listener.sentAge(editText.getText().toString());
                getFragmentManager().popBackStack();
            }
        });


        return view;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        listener = (SecondFragmentListener) getTargetFragment();
    }
}

Este es el resultado:

Attempt to invoke interface method 
'void com.example.transfervariablesthroughfragment.SecondFragment$SecondFragmentListener.sentAge(java.lang.String)' 
on a null object reference
at com.example.transfervariablesthroughfragment.SecondFragment$1.onClick(SecondFragment.java:22))

línea 22 es:

listener.sentAge(editText.getText().toString());
Akaki Kapanadze:

Cuando se crea una instancia de su SecondFragmentfragmento objetivo fijado a la misma:

Fragment fragment = new SecondFragment();
fragment.setTargetFragment(FirstFragment.this, 0);
...
fragmentTransaction.commit();

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=337203&siteId=1
Recomendado
Clasificación