【问题标题】:Snack bar not displayed小吃店不显示
【发布时间】:2016-04-01 09:06:36
【问题描述】:

我从 BaseActivity 继承所有其他活动。

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。

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

【问题讨论】:

  • build.gradle里面有compile 'com.android.support:design:22.2.0'
  • 尝试 Snackbar 小吃吧 = Snackbar .make(findViewById(R.id.coordinatorLayout1), "Helooo....", Snackbar.LENGTH_LONG);小吃吧.show();
  • "com.android.support:design:22.2.0" 这已经在 build.gradle 中了。
  • @Shishram,findViewById 不能从非活动类调用

标签: android android-snackbar


【解决方案1】:

Util class 中创建public 方法,不要将cordinatorLayout 设置为public static。保留您的Activity's 实例的weakReference,通过它您可以显示SnackBar。 方法如下。

public void showSnackBar(Activity activity, String message){
    View rootView = activity.getWindow().getDecorView().findViewById(android.R.id.content);
    Snackbar.make(rootView, message, duration).show();
}

【讨论】:

  • 我已将应用上下文传递给 showSnackBar(), View rootView = ((Activity) context).getWindow().getDecorView().findViewByIdfindViewById(android.R.id.content); ,没有错误但它不执行 Snackbar.make(rootView, text, duration).show();
  • 传递活动实例
  • 感谢@zeus,我已经通过了当前活动的实例并且它有效。
  • 感觉它有帮助:)
  • 我正在使用 getWindow().getDecorView().getRootView() 但它不起作用。
【解决方案2】:
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();
}

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 2021-07-10
    • 2020-05-18
    • 2016-03-13
    • 2020-05-22
    • 2020-04-07
    • 2022-10-08
    • 2020-07-25
    • 2022-12-17
    相关资源
    最近更新 更多