Reputation: 27
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
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
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
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