In the Fragment, there are several options to get the context. Here are the most common and recommended approaches:
Option 1: requireContext() (Recommended)
public class Fragment2 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container, false);
MaterialButton button1 = view.findViewById(R.id.materialbutton1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(requireContext(), "Button clicked", Toast.LENGTH_SHORT).show();
}
});
return view;
}
}Option 2: getActivity()
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(getActivity(), "Button clicked", Toast.LENGTH_SHORT).show();
}
});Option 3: getContext()
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(getContext(), "Button clicked", Toast.LENGTH_SHORT).show();
}
});Option 4: Store context in a variable
public class Fragment2 extends Fragment {
private Context context;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
this.context = context;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment2, container, false);
MaterialButton button1 = view.findViewById(R.id.materialbutton1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(context, "Button clicked", Toast.LENGTH_SHORT).show();
}
});
return view;
}
}Recommendation
Use requireContext() because:
· It’s the most modern and recommended approach
· It guarantees a non-null Context
· It throws a clear exception if the fragment is not attached to an activity
· It’s safer than getContext() which can return null