Есть ли какой-нибудь возможный способ автоматически закрыть снэк-бар Android (LENGTH_INDEFINITE) при подключении к Интернету без каких-либо действий?
Я отобразил снэк-бар Android с INDEFINITE LENGTH, но как закрыть снэк-бар без каких-либо действий или продолжительности, когда Интернет подключен. Я должен проверить, подключен ли интернет или нет. После этого интернет-закусочная будет автоматически закрыта без каких-либо действий или продолжительности. Если кто-нибудь знает, пожалуйста, помогите мне.
вот мой код
public static void snack (HashMap<String,View.OnClickListener> actions,int priority,String message,Activity context){
Snackbar B = Snackbar.make(context.findViewById(android.R.id.content), message, Snackbar.LENGTH_LONG);
if(actions!=null){
Iterator iterator = actions.entrySet().iterator();
B.setDuration(Snackbar.LENGTH_INDEFINITE);
while (iterator.hasNext()) {
Map.Entry pair = (Map.Entry)iterator.next();
B.setAction((String)pair.getKey(),(View.OnClickListener)pair.getValue());
iterator.remove(); // avoids a ConcurrentModificationException
}}
switch (priority)
{
case 0:
B.getView().setBackgroundColor(context.getResources().getColor(R.color.color_pinkbutton));
break;
case 1:
B.getView().setBackgroundColor(Color.parseColor("#66ccff"));
break;
case 2:
B.getView().setBackgroundColor(Color.parseColor("#66ff33"));
break;
}
B.show();
после вызова вышеупомянутого метода с использованием операции выглядит следующим образом
If (NetworkCheck.isNetworkAvailable(this) == false) {
MyApplication.snack(null, 0, "Network Connection failed.",class.this);
else
4 ответа
Я сделал этот синглтон сервисный класс. Он сохранил класс применения чистым и наилучшим для обеспечения удобства обслуживания закусочных.
public class SnackBarUtils {
private static SnackBarUtils mInstance = null;
private Snackbar mSnackBar;
private SnackBarUtils() {
}
public static SnackBarUtils getInstance() {
if (mInstance == null) {
mInstance = new SnackBarUtils();
}
return mInstance;
}
public void hideSnackBar() {
if (mSnackBar != null) {
mSnackBar.dismiss();
}
}
public void showProblemSnackBar(final Activity activity, final String message) {
mSnackBar = Snackbar.make(activity.findViewById(android.R.id.content), message, Snackbar.LENGTH_INDEFINITE);
// Changing action button text color
View sbView = mSnackBar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.YELLOW);
mSnackBar.show();
}
}
Вы можете внести изменения в свой код следующим образом:
Snackbar B; //make it as global
public static void snack (HashMap<String,View.OnClickListener> actions,int priority,String message,Activity context){
B = Snackbar.make(context.findViewById(android.R.id.content), message, Snackbar.LENGTH_LONG);
if(actions!=null){
Iterator iterator = actions.entrySet().iterator();
B.setDuration(Snackbar.LENGTH_INDEFINITE);
while (iterator.hasNext()) {
Map.Entry pair = (Map.Entry)iterator.next();
B.setAction((String)pair.getKey(),(View.OnClickListener)pair.getValue());
iterator.remove(); // avoids a ConcurrentModificationException
}}
switch (priority){
case 0:
B.getView().setBackgroundColor(context.getResources().getColor(R.color.color_pinkbutton));
break;
case 1:
B.getView().setBackgroundColor(Color.parseColor("#66ccff"));
break;
case 2:
B.getView().setBackgroundColor(Color.parseColor("#66ff33"));
break;
}
B.show();
Сделайте еще один способ скрыть закусочную как
private static hideSnackbar(){
if(B !=null && B.isShown()){
B.dismiss();
}
}
И в твоем состоянии
If (NetworkCheck.isNetworkAvailable(this) == false) {
MyApplication.snack(null, 0, "Network Connection failed.",class.this)
}else{
MyApplication.hideSnackbar();
}
Вам просто нужно создать приемник трансляции и получить следующее событие<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
и подпишитесь на него в вашей деятельности / фрагмент
Полная информация здесь http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
Для тех, кто любит котлин, добавьте этот метод в свой класс Utils.
fun showNoNetworkSnackBar(activity: Activity,message: String):Snackbar {
val snackbar: Snackbar = Snackbar.make(
activity.findViewById(android.R.id.content),
message, Snackbar.LENGTH_INDEFINITE
)
return snackbar
}
Тогда назовите это так
val snackbar = Utils.showNoNetworkSnackBar(this,"No Internet")
snackbar.show or snackbar.dismiss