如何在特定片段

时间:2018-05-03 15:17:55

标签: android android-fragments

我知道我不是第一个提出这个问题的人,但是我已经提到了很多关于这个问题的帖子,但没有解决我的问题。

我想要做的是在我的MainActivity(底部导航栏活动)我有底部导航栏,在这个MainActivity我有cardviews如果我点击cardview我需要在该片段中显示另一个片段我想要隐藏底部导航栏。当我导航回MainActivity时,botoom导航栏应该在那里。

在我的情况下,Alarm.java是我要隐藏底部导航栏的片段。

Alarm.java

public class Alarm extends Fragment {

    private OnFragmentInteractionListener mListener;

    public Alarm() {

    }

    public static Alarm newInstance(String param1, String param2) {
        Alarm fragment = new Alarm();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_alarm, container, false);
    }

    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(Uri uri);
    }
}

2 个答案:

答案 0 :(得分:1)

MainActivity中,您可以实施两种方法来负责显示和隐藏BottomNavigationView。例如,这两种方法可以动画上下滑动:

private void hideBottomNavigationView(BottomNavigationView view) {
    view.clearAnimation();
    view.animate().translationY(view.getHeight()).setDuration(300);
}

public void showBottomNavigationView(BottomNavigationView view) {
    view.clearAnimation();
    view.animate().translationY(0).setDuration(300);
}

MainActivity中,您在打开hide之前立即致电CardView,并在showonCreate中致电onResume

修改

但是,我认为更简洁的方法可能是在片段中创建一个界面:

public interface OnCardViewOpenedInterface{
    void onOpen(); // hide bottom bar when photo is opened
    void onClose(); // show bottom bar when photo is opened
}

onStop的{​​{1}}和onResume中调用这些方法:

Fragment

然后在@Override public void onStop() { super.onStop(); mListener.onClose(); } @Override public void onResume() { super.onResume(); mListener.onOpen(); } 中实施界面,覆盖方法MainActivityonOpen(),然后调用您的onClose()hide方法。

他们可能都会工作,也许第二个过于复杂,只是我更喜欢它。

答案 1 :(得分:-1)

我尝试了@Suleyman的方法,但对我而言不起作用。最简单的解决方案是在 getJobs().then((jobs) => { var mailPayload = { to: emails, from: "", templateId: "", dynamicTemplateData: { subject: "Testing Templates", name: "Some One", city: "Denver", week: "August 24 2020", }, }; for (let i = 0; i < jobs.length; i++) { mailPayload.dynamicTemplateData["job" + i] = { header: jobs[i].job_title, body: jobs[i].job_description, cta: "Apply now", url: jobs[i].company_url, }; } mail(mailPayload); res.send("Mail sent Successfully").status(200); }); }); 中使用public static方法,并从要隐藏底部导航栏的片段中引用它。

不要忘记将MainActivity初始化为navView

在您的public static

MainActivity

在您的 public static void hideBottomNav(){ navView.setVisibility(View.GONE); } public static void showBottomNav(){ navView.setVisibility(View.GONE); }

MyFragment