我试图在单击按钮时显示snackbar视图,但单击按钮时显示强制关闭错误。
我在下面定义了片段类和错误日志。
我有片段类:
public class HomeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
context = getActivity();
initUI(rootView);
return rootView;
}
private void initUI(View view) {
btn= (Button) view.findViewById(R.id.btnpress);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar.make(getView(),"SnackBAr Test" , Snackbar.LENGTH_LONG).show();
}
});
}fragment_home.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/mainrl"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:paddingBottom="40dp" >
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:Text="PLEASE PRESS" />
</LinearLayout>
</RelativeLayout>当我按下按钮时,它没有显示snackbar。它给出了以下错误日志:
java.lang.NoClassDefFoundError: android.support.design.widget.CoordinatorLayout
at android.support.design.widget.Snackbar.findSuitableParent(Snackbar.java:237)
at android.support.design.widget.Snackbar.make(Snackbar.java:206)
at com.example.test.fragment.HomeFragment$3.onLeftCardExit(HomeFragment.java:168)
at android.view.ViewPropertyAnimator$AnimatorEventListener.onAnimationEnd(ViewPropertyAnimator.java:1030)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056)
at android.animation.ValueAnimator.access$400(ValueAnimator.java:50)
at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:644)
at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:660)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
at android.view.Choreographer.doCallbacks(Choreographer.java:591)
at android.view.Choreographer.doFrame(Choreographer.java:559)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)我怎样才能解决这个错误?
发布于 2015-08-31 10:43:17
我已经解决了这个问题:
如果我们不将CoordinatedLayout包括到我的fragment_home.xml中,那就好了。
解决方案:
定义:私有RelativeLayout mRoot;
现在在initUI(View view)中初始化
mRoot = (RelativeLayout) view.findViewById(R.id.mainrl);在Button单击事件上,放置以下代码:
Snackbar.make(mRoot, "Had a snack at Snackbar", Snackbar.LENGTH_LONG).show();现在这件事的主要内容是:
只需将当前主题更改为Theme.AppCompat.Light.NoActionBar
完成了!
发布于 2016-12-04 03:11:19
您还可以使用:
getActivity().findViewById(android.R.id.content)就像这样:
Snackbar snackBar = Snackbar.make(getActivity().findViewById(android.R.id.content),
"Look at me, I'm a fancy snackbar", Snackbar.LENGTH_LONG);
snackBar.show();请参阅this
发布于 2015-08-31 07:34:14
SnackBar make方法获取视图,并从该视图跟踪继承,直到找到要显示的适当布局,如果有异常,这意味着您没有向项目添加CoordinatedLayout
private static ViewGroup findSuitableParent(View view) {
ViewGroup fallback = null;
do {
if(view instanceof CoordinatorLayout) {
return (ViewGroup)view;
}
if(view instanceof FrameLayout) {
// android.R.id.content
if(view.getId() == 16908290) {
return (ViewGroup)view;
}
fallback = (ViewGroup)view;
}
if(view != null) {
ViewParent parent = view.getParent();
view = parent instanceof View?(View)parent:null;
}
} while(view != null);
return fallback;
}https://stackoverflow.com/questions/32305627
复制相似问题