#java #android #android-snackbar
Вопрос:
Я использую подход с несколькими фрагментами одного действия в своем приложении, и я хотел бы отобразить закусочную (вместо того, чтобы отображать тост, что я сделал без каких-либо проблем).
Вот код фрагмента, в котором я хотел бы, чтобы закусочная отображалась после нажатия кнопки:
package com.example.td.bapp; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.example.td.bapp.databinding.FragmentItemBinding; import com.example.td.bapp.R; import com.google.android.material.snackbar.Snackbar; public class FR_Item extends Fragment implements View.OnClickListener { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Nullable private FragmentItemBinding binding; @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = FragmentItemBinding.inflate(inflater, container, false); /* Set onClickListeners to the buttoms */ binding.orderingButton.setOnClickListener(this); return binding.getRoot(); } public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Override public void onClick(View view) { if(view.getId() == R.id.ordering_button) { showSnackBar(getActivity(), getString(R.string.message_orderSubmittedSuccessfully)); } } public void onDestroyView() { super.onDestroyView(); binding = null; } public void showSnackBar(Activity activity, String message){ /* 1st try */ View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content); Log.e("LogTag", "showSnackbar - Try 1"); Snackbar.make(rootView, message, Snackbar.LENGTH_LONG).show(); /* 2nd try */ Log.e("LogTag", "showSnackbar - Try 2"); Snackbar.make(activity.findViewById(R.id.mainActivityLayout), message, Snackbar.LENGTH_LONG).show(); } }
Я попробовал два способа, которые рекомендуются здесь: [Snack bar not displayed][1]
. В обоих случаях showSnackBar
вызывается метод (я могу проверить это из-за тега журнала), но в приложении не отображается текст. R.id.mainActivityLayout
это идентификатор ограничения моей основной деятельности (во 2-й попытке), и android.R.id.content
я понятия не имею, что это такое (в 1-й попытке). Я просто взял это из принятого ответа Stackoverflow. Я также попытался заменить его этим (с 1 — й попытки) View rootView = activity.getWindow().getDecorView().findViewById(R.id.mainActivityLayout);
Во всех 3 случаях результат один и тот же. Там нет видимой панели закусок и нет сообщения об ошибке (даже в автоматически созданных сообщениях об ошибках LogCat). У вас есть какие-нибудь идеи, в чем проблема и как ее решить?
Комментарии:
1. Ты пробовал
binding.getRoot()
вместоrootView
этого ?2. @hata: Спасибо за ваш комментарий, хата. Я только что попробовал предложенный вами код, но никаких изменений нет. Панель закусок не отображается (хотя метод выполнен), и сообщения об ошибке нет.
3. можете ли вы добавить фрагмент кода ошибки ? потому что это странно, я просто использую фрагмент кода функции showSnackBar, он отлично работает.
4. @MaulikTogadiya: Спасибо за ваш комментарий. Как указано в вопросе, ни в одном журнале регистрации нет кода ошибки и никакой информации об этой проблеме. Тем не менее, Закусочная не отображается.
5. В моем подходе с несколькими фрагментами с одним действием я использую нижнюю панель навигации в активности singel (которая отображается затем в самом фрагменте). Возможно ли, что эта панель навигации по нижней части каким-то образом накладывается на закусочную?