如何从另一片段的onTouch()内部替换片段?
问题描述:
我需要当用户触摸的另一个Fragment
TextView
的以显示Fragment
。下面是我有:如何从另一片段的onTouch()内部替换片段?
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}
任何人都知道如何处理这个?
答
您需要从Activity
使这些Fragment
交易。承载Fragment
的Activity
应具有用于处理分段切换的公共功能,以便当您单击Fragment1
的TextView
时,将调用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
,你需要到TextView
实现一个onClick监听器,这样当点击TextView
时,Fragment1
切换到Fragment2
。
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((YourActivity) getActivity()).switchToFragment2();
}
});)
希望有帮助。
很高兴知道这有帮助。 –