在视图寻呼机中使用时的片段生命周期

Posted

技术标签:

【中文标题】在视图寻呼机中使用时的片段生命周期【英文标题】:Fragment lifecycle when use in view pager 【发布时间】:2020-12-28 16:11:58 【问题描述】:

ViewPagerTableLayout 中,我有5 个片段。我点击 Fragment-3,setUserVisibleHint = trueButton 在 Fragment-3 上单击、替换或添加另一个片段。单击返回时,在 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);
    

新片段:

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, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    

【问题讨论】:

你的意思是你在 Fragment-3 上有按钮,当用户点击这个按钮时,它会把他带到 anth Fragment?那么当用户点击新 Fragment 中的返回按钮时,您希望将他带回 Fragment-3 吗? 处理打开新片段和返回导航。当从新片段点击返回时,Fragment-3 没有得到任何生命周期事件来识别 Fragment-3 现在可见 现在我明白了,请与您分享 Fragment-3 和新的 Fragment 代码,方便我为您提供帮助 我已经添加了代码兄弟。 【参考方案1】:

您可以在新片段中轻松处理它

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;

 );

在返回真之前;当用户回击时做你想做的事 你可以使用

getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

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

【讨论】:

兄弟。如果那里只有一个导航,我可以处理它。但是有很多导航到不同的片段。我发布只是为了一个例子 按下后退按钮时你想做什么? 事务列表需要更新和其他UI更新,每次后按。 只需在所有片段上复制 onKey 方法,然后在每个片段中按您的方式更新 UI

以上是关于在视图寻呼机中使用时的片段生命周期的主要内容,如果未能解决你的问题,请参考以下文章

断开连接时的右视图生命周期

导航架构片段重载问题

在不存在的片段上调用片段生命周期和 onCreate 的问题

片段生命周期 - 在显示/隐藏时调用哪个方法?

关于片段生命周期,何时调用片段的 onActivityResult?

关于其活动的片段生命周期