【问题标题】: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 代码,方便我为您提供帮助
  • 我已经添加了代码兄弟。

标签: android android-fragments android-viewpager android-tablayout


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多