Reputation: 21
I am trying to implement a tab layout in my Android app using TabLayout and ViewPager. I have a fragment with tabbed layout. The problem is that when I perform a call to my server I want to display a message using a Toast, but the message is not displayed.
I defined the Parent Fragment as follows:
public class BookDetailsTabbedFragment extends Fragment {
private PagerAdapter pagerAdapter;
private TabLayout tableLayout;
private ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_book_details_tabbed, container, false);
tableLayout = view.findViewById(R.id.tab_layout);
viewPager = view.findViewById(R.id.view_pager);
tableLayout.setupWithViewPager(viewPager);
pagerAdapter = new PagerAdapter(getChildFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
BookDetailsFragment bookDetailsFragment = new BookDetailsFragment();
bookDetailsFragment.setArguments(getArguments());
ReviewsFragment reviewsFragment = new ReviewsFragment();
reviewsFragment.setArguments(getArguments());
pagerAdapter.initAdapter();
pagerAdapter.addFragment(bookDetailsFragment, "Details");
pagerAdapter.addFragment(reviewsFragment, "Reviews");
viewPager.setAdapter(pagerAdapter);
return view;
}
}
The tabs of the previous fragment are also fragments and in one of the tabs I have the following code:
BookRentRequestDto bookRentRequestDto = getBookRentRequestDto();
Call<BookRentResponseDto> call = WebServerAPIBuilder.getInstance().createSubscription(bookRentRequestDto);
call.enqueue(new Callback<BookRentResponseDto>() {
@Override
public void onResponse(Call<BookRentResponseDto> call, retrofit2.Response<BookRentResponseDto> response) {
if (response.isSuccessful()) {
Toast.makeText(getContext(), "Book rented", Toast.LENGTH_LONG).show();
} else if (response.code() == 404) {
Toast.makeText(getContext(), "There are no volumes available in stock for this book. Sorry to inform you.", Toast.LENGTH_LONG).show();
} else if (response.code() == 403) {
Toast.makeText(getContext(), "You have already rented this book", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<BookRentResponseDto> call, Throwable t) {
Toast.makeText(getContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});
Why the Toast is not displaying anything?
My assumption is that when Toast.makeText(getContext(), "Book rented", Toast.LENGTH_LONG).show() get's called the fragment does not use the right context. But when I tried to replace getContext() with getActivity() nothing changed. I also tried to use getActivity().runOnUiThread(() -> Toast.makeText(getActivity(), "Book rented", Toast.LENGTH_LONG).show()), but the result was the same.
Upvotes: 1
Views: 63