Kayaz
Kayaz

Reputation: 27

Buttons with fragments

I am working on an app for my school project in android studio that works with a navigation drawer and multiple fragments, I have got all the fragments setup and working but now I am stuck. I have no clue how to make working buttons in fragments.

Fragments activity

    public class CaloriesEaten extends Fragment {
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    private static EditText caleaten;
    private static EditText calalready;
    private static TextView caltotal;
    private static Button btnadd;

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

    private OnFragmentInteractionListener mListener;

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

    public static CaloriesEaten newInstance(String param1, String param2) {
        CaloriesEaten fragment = new CaloriesEaten();
        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) {        View view =  inflater.inflate(R.layout.fragment_calories_eaten,
            container, false);


        caleaten = (EditText) view.findViewById(R.id.CalorieInput);
        calalready = (EditText) view.findViewById(R.id.Cals);
        caltotal = (TextView) view.findViewById(R.id.CalNumber);
        btnadd = (Button) view.findViewById(R.id.addcalories);
        // Inflate the layout for this fragment
        btnadd.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                buttonClicked(v);
            }
        });
        return inflater.inflate(R.layout.fragment_calories_eaten, container, false);
    }
    public void buttonClicked (View view) {
        int x = Integer.parseInt(caleaten.getText().toString());

        int y = Integer.parseInt(calalready.getText().toString());

        int total = x + y;

        caltotal.setText(Integer.toString(total));
    }
    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 {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

This is my first time asking a question here so if i'm missing anything please let me know.

Thanks!

Upvotes: 1

Views: 67

Answers (3)

Ashish Rajvanshi
Ashish Rajvanshi

Reputation: 466

Replace

return inflater.inflate(R.layout.fragment_calories_eaten, container, false);

to

view = inflater.inflate(R.layout.fragment_calories_eaten, container, false);
return view;

Now using this view instance you can find you other views inflating on it as button.

btnClickMe = (Button)view.findViewById(R.id.btn);

use above code in onCreateView method before returning view.

Upvotes: 0

Suhas Bachewar
Suhas Bachewar

Reputation: 1230

View override by inflating at end of onCreateView() method

Replace

return inflater.inflate(R.layout.fragment_calories_eaten, container, false);

to

return view;

in onCreateView() method

Upvotes: 1

Rohit5k2
Rohit5k2

Reputation: 18112

Funny reason: You are inflating a View, using it to get it's children and finally returning different inflated view instance. You should return the same instance you are inflating initially and using to get it's children.

Just change

return inflater.inflate(R.layout.fragment_calories_eaten, container, false);

to

return view;

in onCreateView() method

Upvotes: 0

Related Questions