Nisath
Nisath

Reputation: 55

Adding code to Fragment files in Bottomnavigtaionview

I want to know how to code inside a fragment.java file. Firstly, I am a beginner in coding. I have created a Bottomnavigationview with three navigation buttons in the bottomnaviation bar and I have created Fragment activity for each of the navigation buttons. One of the navigation options in the bottom navigation bar is 'more' and I have added a button with the id "btn_Logoff". when I click the button I want it to go the activity_login.xml or LoginActivity.java. I dont know what is the code for that and where to add the code in the default fragment java file so here is what is written on the fragment file by default:

filename is MoreFragment.java

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;


/**
 * A simple {@link Fragment} subclass.
 * Activities that contain this fragment must implement the
 * {@link MoreFragment.OnFragmentInteractionListener} interface
 * to handle interaction events.
 * Use the {@link MoreFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class MoreFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;

    public MoreFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment MoreFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static MoreFragment newInstance(String param1, String param2) {
        MoreFragment fragment = new MoreFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_more, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    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 {
            Toast.makeText(context, "Notification Fragment Attached", Toast.LENGTH_SHORT).show();

        }
    }

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

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

Ive been having a lot of trial and errors and still no resolution. Any help appreciated. Thank you.

Upvotes: 0

Views: 51

Answers (2)

MarcinR
MarcinR

Reputation: 806

Can you explain this part?

when I click the button I want it to go the activity_login.xml or LoginActivity.java.

Do you want to execute something in activity after click on button in fragment, am I right?

You can do it for some ways. Easiest is set listener that listening when you clicking on the button.

  1. Create interface:

    public interface OnNavigationButtonClickListener {
        void onMoreClick();
    }
    
  2. Create listener variable in fragment:

    private OnNavigationButtonClickListener navigationListener;
    

    and setter for it:

    public void setNavigationListener(OnNavigationButtonClickListener listener) {
        this.navigationListener = listener;
    }
    

3.Notify your listeners in fragment on more button click:

        onMoreButton.setOnClickListener(new OnClickListener {
            navigationListener.onMoreClick();
        });

4. Then set listener in your activity:

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        fragment.setNavigationListener(new OnNavigationButtonClickListener() {
            @Override
            public void onMoreClick() {
                // you clicked 'more' button in fragment
                // do what you want
            }
        });

Upvotes: 1

Joaqu&#237;n
Joaqu&#237;n

Reputation: 1126

Assuming thay you already identified btn_Logoff with the findViewById and everything all you need to do is add a onclickListener that launchs the activity you want, your code for the clicklistener will look similar to this

Button btn_Logoff;

your class{

btn_Logoff  = (Button)  findViewById(R.id.IdOfYourBtnInTheXmlFile);



    btn_Logoff.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), LoginActivity.class);

                startActivity(intent);
                }
            });

}

Upvotes: 0

Related Questions