0

我想在我的应用程序中使用snackbar,所以我为此设置了下面的代码

public class FragmentAddProperty extends Fragment
{
   RelativeLayout mRelative 
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)  {
        view = inflater.inflate(R.layout.layout_1,
                container, false);
    mRelative = (RelativeLayout) view.findViewById(R.id.edt_pro_city);
    Snackbar.make(mRelative, "No images.", Snackbar.LENGTH_LONG).show();
    }

}

编辑

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/edt_pro_city"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f8f8f8"
android:orientation="vertical" >



        <ImageView
            android:id="@+id/sample_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:src="@drawable/icon_list"
            android:visibility="visible" />
            </RelativeLayout>

结果我得到了以下错误

java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.support.design.widget.Snackbar$SnackbarLayout

我该如何解决这个问题?

所有建议都是可观的

4

5 回答 5

3

您可以在Frgamnet 中使用snackbar。只需使用ViewGroup 的对象。

 public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) 
 {
  Snackbar.make(container, "Please Check your Internet Connection",Snackbar.LENGTH_LONG).show(); 
 }
于 2016-09-26T06:30:17.497 回答
0

我在谷歌上做了很多工作,试图在 android 片段中显示小吃栏,但它没有发生,因为我需要将父视图添加为“CoordinatorLayout”。

在 CoordinatorLayout 中,我使用了整个布局结构,并将 CoordinatorLayout 作为小吃店的父视图。

如下所示:

=> 在 .xml 文件中

=> Java 类文件

CoordinatorLayout parentLayout = (CoordinatorLayout)rootView.findViewById(R.id.parentLayout);

    private void showInternetAlert(){

    Snackbar snackbar = Snackbar
            .make(parentLayout, "No internet connection!", Snackbar.LENGTH_LONG)
            .setAction("RETRY", new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                }
            });

    // Changing message text color
    snackbar.setActionTextColor(Color.RED);

    // Changing action button text color
    View sbView = snackbar.getView();
    TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
    textView.setTextColor(Color.YELLOW);

    snackbar.show();

}

它对我来说很好。

问题出现在 xml 文件中,我们需要将父视图放置为“CoordinatorLayout”

于 2016-03-01T12:38:06.190 回答
0

在 Snakebar 中,您必须传递视图或父布局视图。因此,只需将您的 id 替换为 view 并将您的代码替换为 this 。

Snackbar.make(view, "No images.", Snackbar.LENGTH_LONG).show();
于 2016-01-08T08:55:01.983 回答
0

没有 Snackbar 将无法工作CordinatorLayout,您需要创建您 fragment_list.xml喜欢的这个,否则Snackbar snackbar = Snackbar.make(view, R.string.action, Snackbar.LENGTH_LONG);将结束java.lang.NullPointerException

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.design.widget.CoordinatorLayout>
于 2016-03-23T09:01:52.630 回答
0

例如,假设您现有的布局是 RelativeLayout,您可以将 CoordinatorLayout 添加到相对布局,如下所示:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:id="@+id/myCoordinatorLayout"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">
</android.support.design.widget.CoordinatorLayout>

然后,确保将 CoordinatorLayout 作为 Snackbar.make() 命令的第一个参数传递。

final View viewPos = findViewById(R.id.myCoordinatorLayout);    
Snackbar.make(viewPos, R.string.snackbar_text, Snackbar.LENGTH_LONG)
                            .setAction(R.string.snackbar_action_undo, showListener)
                            .show();

这将导致 Snackbar 显示在提供给 make() 函数的 CoordinatorLayout 的底部。

如果您传递的 View 不是 CoordinatorLayout,则 Snackbar 将向上遍历树,直到找到 CoordinatorLayout 或布局的根。

于 2016-01-08T09:08:05.027 回答