我想在我的应用中使用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
我该如何解决这个问题?
所有建议都很明显
答案 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>