Как я могу заменить фрагмент изнутри 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();
}
});)
Надеюсь, это поможет.