在视图分页器中使用时的片段生命周期

问题描述

ViewPagerTableLayout中,我有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);

隐藏最后一个片段并显示前一个片段