Snack bar not displayed

2020-06-16 03:27发布

I'm inheriting from BaseActivity for all the other activities.

public class BaseActivity extends AppCompatActivity {

    public static CoordinatorLayout coordinatorLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        coordinatorLayout = (CoordinatorLayout) findViewById(R.id
                .coordinatorLayout1);
    }
}

activity_base.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordinatorLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.Activity.BaseActivity"> 
</android.support.design.widget.CoordinatorLayout>

Snackbar is not displayed when tried to access from a non-activity class.

Snackbar snackbar = Snackbar.make(
        BaseActivity.coordinatorLayout,
        "Helooo....",
        Snackbar.LENGTH_LONG
);

2条回答
Fickle 薄情
2楼-- · 2020-06-16 04:04
private static final String message = "No Internet Connection";

public  static void message(Activity activity) {
    View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content);
    Snackbar.make(rootView, message, Snackbar.LENGTH_LONG).show();
}
查看更多
贪生不怕死
3楼-- · 2020-06-16 04:06

Make a public method in a Util class and dont make the cordinatorLayout as public static. Keep the weakReference of your Activity's instance and through that you can show the SnackBar. Method given below.

public void showSnackBar(Activity activity, String message){
    View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content);
    Snackbar.make(rootView, message, duration).show();
}
查看更多
登录 后发表回答