Как я могу заменить фрагмент изнутри onTouch() другого фрагмента?

Мне нужно отобразить Fragment когда пользователь касается TextView другого Fragment, Вот что у меня есть:

public class FindPeopleHelpFragment extends Fragment {

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_find_people_help, container, false);

        ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(R.string.find_people_help);

        TextView welcome_home = (TextView) view.findViewById(R.id.find_people_help);
        welcome_home.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent evt) {
                if (evt.getAction() == MotionEvent.ACTION_DOWN) {
                    EditProfileFragment editProfileFragment = new EditProfileFragment();
                    FragmentManager manager = getActivity().getSupportFragmentManager();
                    manager.beginTransaction().replace(R.id.fragment_container, editProfileFragment, editProfileFragment.getTag()).commit();
                }
                return true;
            }
        });

        // Inflate the layout for this fragment
        return view;
    }
}

Проблема в том, что onTouch() возвращает boolean, но при замене FragmentМне нужно вернуть View, В противном случае я получаю следующее.

 10-05 15:00:51.057 25152-25152/wegrok.chiaramail.com E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: wegrok.chiaramail.com, PID: 25152
                                                                       java.lang.IllegalArgumentException: No view found for id 0x7f0f00b1 (wegrok.chiaramail.com:id/fragment_container) for fragment FindPeopleHelpFragment{c052157 #1 id=0x7f0f00b1}

Кто-нибудь знает, как с этим бороться?

1 ответ

Решение

Вы должны сделать это Fragment транзакции от вашего Activity, Activity который принимал Fragment должна иметь публичную функцию для обработки переключения фрагментов, чтобы при TextView вашей Fragment1 по щелчку, публичный метод Activity будет вызван, чтобы сделать Fragment переключатель.

Таким образом, вы могли бы рассмотреть возможность Activity как это.

public class YourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);

        // The Fragment 1 will be loaded by default
        switchToFragment1();
    }

    public void switchToFragment1() {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new Fragment1()).commit();
    }

    public void switchToFragment2() {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new Fragment2()).commit();
    }
}

Теперь из вашего Fragment1вам нужно внедрить слушатель onClick в TextView, так что когда TextView нажата, Fragment1 переключается на Fragment2,

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ((YourActivity) getActivity()).switchToFragment2();
    }
});) 

Надеюсь, это поможет.

Другие вопросы по тегам