Ilja Tarasovs :
I want to return variable from current Fragment to previous Fragment by clicking on button with interface. I cant return variable from one Fragment extended from Fragment class to another Fragment extended from Fragment class.
But I can return variable from DialogFragment to Fragment with the same transferring method through interface.
In MainActivity I load FirstFragment:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new FirstFragment()).commit();
In class FirstFragment onClick TextView tvSecondFragment I create Fragment:
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);
}
}
This is SecondFragment class where I try to return variable onClick button:
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();
}
}
This is the result:
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))
line 22 is:
listener.sentAge(editText.getText().toString());
Akaki Kapanadze :
When creating an instance of your SecondFragment
set target fragment to it:
Fragment fragment = new SecondFragment();
fragment.setTargetFragment(FirstFragment.this, 0);
...
fragmentTransaction.commit();
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=329309&siteId=1