在视图寻呼机中使用时的片段生命周期
Posted
技术标签:
【中文标题】在视图寻呼机中使用时的片段生命周期【英文标题】:Fragment lifecycle when use in view pager 【发布时间】:2020-12-28 16:11:58 【问题描述】:在ViewPager
和TableLayout
中,我有5 个片段。我点击 Fragment-3,setUserVisibleHint = true
。 Button
在 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 的问题