Цель: Попытка передать данные из FragmentA в Activity в FragmentB с помощью интерфейса.
Проблема: FragmentB не заменяется (создан) во фрагменте при нажатии на дно.(Также пробовал .add) Единственный способ обойти это - запустить оба фрагмента при создании действия.
Путь: активность -> фрагментA -> замена фрагмента и передача данных с помощью интерфейса -> activty -> передача данных из действия во фрагмент B.
Попробовал: .Заменить и .Добавить, фрагментb в активности и во фрагментеA
Основная активность:
public class MainActivity extends AppCompatActivity implements Communicator {
android.support.v4.app.FragmentTransaction ft;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AFragment savedFragment = (AFragment)
getSupportFragmentManager().findFragmentById(R.id.fl_conainter);
if (savedFragment == null) {
addFragment();
}
}
private void addFragment() {
ft = getSupportFragmentManager().beginTransaction();
AFragment aFragment = new AFragment();
ft.add(R.id.fl_conainter,aFragment,"FragA");
ft.commit();
}
//****Issue is here ****
@Override
public void respond(String value) {
addSecondFragment();
FragmentManager manager=getSupportFragmentManager();
/* BFragment fragment = (BFragment)
manager.findFragmentById(R.id.fragmentB);*/
BFragment fragment = (BFragment) manager.findFragmentByTag("Fragb");
fragment.changeData(value);
}
private void addSecondFragment() {
BFragment bFragment = new BFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fl_conainter,bFragment,"Fragb");
ft.commit();
}
}
Фрагмент A:
public class AFragment extends Fragment implements View.OnClickListener {
Communicator communicator;
Button button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_a, container, false);
}
@Override
public void onActivityCreated (Bundle saveInstanceState) {
super.onActivityCreated(saveInstanceState);
button = getActivity().findViewById(R.id.update_btn);
button.setOnClickListener(this);
communicator = (Communicator) getActivity();
}
@Override
public void onClick(View view) {
// AddNextfrag();
communicator.respond("passing data");
}
private void AddNextfrag (){
android.support.v4.app.FragmentTransaction ft;
ft = getActivity().getSupportFragmentManager().beginTransaction();
BFragment bFragment = new BFragment();
ft.add(R.id.fl_conainter,bFragment, "Fragb");
ft.commit();
}
}
Фрагмент B:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class BFragment extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_b, container, false);
}
@Override
public void onActivityCreated (Bundle saveInstanceState) {
super.onActivityCreated(saveInstanceState);
text = getActivity().findViewById(R.id.result_tv);
}
public void changeData(String value){
text.setText(value);
}
}
Интерфейс:
public interface Communicator {
void respond(String value);
}