问题描述
在ViewPager
和TableLayout
中,我有5个片段。我单击片段3 setUserVisibleHint = true
。片段3上的Button
单击,替换或添加另一个片段。单击返回时,在Fragment-3上没有任何事件。当用户单击时,我想执行一些操作。
public class ThreeFragment extends Fragment {
public ThreeFragment() {
// required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment BlankFragment.
*/
// Todo: Rename and change types and number of parameters
public static ThreeFragment newInstance() {
ThreeFragment fragment = new ThreeFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
Log.d("onResume","onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d("onPause","onPause");
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.d("onCreateView","onCreateView");
View view = inflater.inflate(R.layout.fragment_three,container,false);
view.findViewById(R.id.txt).setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager2 = getFragmentManager();
FragmentTransaction fragmentTransaction2 = fragmentManager2.beginTransaction();
BlankFragment fragment2 = BlankFragment.newInstance();
fragmentTransaction2.addToBackStack("abc");
fragmentTransaction2.add(android.R.id.content,fragment2);
fragmentTransaction2.commit();
}
});
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibletoUser) {
super.setUserVisibleHint(isVisibletoUser);
Log.d("setUserVisibleHint","setUserVisibleHint :: " + isVisibletoUser);
}
}
NewFragment:
public class BlankFragment extends Fragment {
public BlankFragment() {
// required empty public constructor
}
// Todo: Rename and change types and number of parameters
public static BlankFragment newInstance() {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank,false);
}
}
解决方法
您可以轻松地在新片段中处理它
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v,int keyCode,KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
//do what you wnt to do when the user prees back
return true;
}
return false;
}
} );
在返回true之前;当用户按回去时,做您想做的事情 你可以使用
getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
隐藏最后一个片段并显示前一个片段