Android:snackbar不在片段类中工作

时间:2016-01-08 08:52:50

标签: android android-snackbar snackbar

我想在我的应用中使用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

我该如何解决这个问题?

所有建议都很明显

5 个答案:

答案 0 :(得分:2)

你可以在Frgamnet中使用snackbar.just使用ViewGroup的对象。

 public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) 
 {
  Snackbar.make(container, "Please Check your Internet Connection",Snackbar.LENGTH_LONG).show(); 
 }

答案 1 :(得分:0)

在Snakebar中,您必须传递视图或父布局视图。所以只需用视图替换你的id并用这个替换你的代码。

Snackbar.make(view, "No images.", Snackbar.LENGTH_LONG).show();

答案 2 :(得分: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的底部。

如果您传递的视图不是CoordinatorLayout,Snackbar将向上走树,直到找到CoordinatorLayout或布局的根。

答案 3 :(得分:0)

我在google上努力尝试在android片段中显示小吃吧,但是它没有发生,因为我需要添加父视图作为&#34; CoordinatorLayout&#34;。

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

如下:

=&GT;在.xml文件中

=&GT; 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文件中我们需要将父视图放置为&#34; CoordinatorLayout&#34;

答案 4 :(得分: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>