Фрагмент не заменяется при клике на другой фрагмент с использованием интерфейса - PullRequest
0 голосов
/ 05 марта 2019

Цель: Попытка передать данные из 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);
}

1 Ответ

0 голосов
/ 05 марта 2019
public class AFragment extends Fragment implements
   View.OnClickListener {
       Communicator communicator;
       Button button;
       Activity activity;

       @Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
this.activity = activity;
}

       @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) activity ;

       }

       @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();

           }

       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...