Android &引用;尝试对空对象引用调用虚方法;尝试在DialogFragment中获取CardView的LayoutParams时?
我试图设置Android &引用;尝试对空对象引用调用虚方法;尝试在DialogFragment中获取CardView的LayoutParams时?,android,android-fragments,nullpointerexception,android-layoutparams,Android,Android Fragments,Nullpointerexception,Android Layoutparams,我试图设置对话框片段内部的卡片视图的大小,但出现以下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.ViewGroup$LayoutParams android.support.v7.widget.CardView.getLayoutParams()” 这是我的代码: CardView cardView; onCreate(...){ cardView = (C
对话框片段
内部的卡片视图
的大小,但出现以下错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.ViewGroup$LayoutParams android.support.v7.widget.CardView.getLayoutParams()”
这是我的代码:
CardView cardView;
onCreate(...){
cardView = (CardView) findViewById(R.id.cardViewInDialogFragment);
}
private void openDialogFragment() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
BlankFragment blankFragment = new BlankFragment();
blankFragment.show(getSupportFragmentManager(),"blankFragment");
CardView.LayoutParams layoutParams = (CardView.LayoutParams) cardView.getLayoutParams();
layoutParams.height = displayMetrics.heightPixels - 20;
layoutParams.width = displayMetrics.widthPixels - 20;
cardView.setLayoutParams(layoutParams);
}
这是不可能的还是我做错了什么
更新:
cardView位于片段内部
更新2:
将代码更改为以下代码时:
空白片段:
public static View view;
pulic void onCreateView(...) {
view = inflater.inflate(R.layout.fragment_blank, container, false);
return view;
}
主要活动:
CardView cardView;
protected void onCreate(...){
...
cardView = (CardView) BlankFragment.view.findViewById(R.id.cardViewInDialogFragment);
openDialogFragment();
}
private void openDialogFragment() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
BlankFragment blankFragment = new BlankFragment();
blankFragment.show(getSupportFragmentManager(),"blankFragment");
CardView.LayoutParams layoutParams = (CardView.LayoutParams) cardView.getLayoutParams();
layoutParams.height = displayMetrics.heightPixels - 20;
layoutParams.width = displayMetrics.widthPixels - 20;
cardView.setLayoutParams(layoutParams);
}
,我得到这个错误:
致命异常:主
进程:com.sim.buttonBarnavigationAndFragment,PID:10685
java.lang.RuntimeException:无法启动活动
ComponentInfo{com.sim.buttombarnavigationandfragment/com.sim.buttombarnavigationandfragment.MainActivity}:
java.lang.NullPointerException:尝试调用虚拟方法
空值上的“android.view.view android.view.view.findViewById(int)”
对象引用
在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2680)
在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2741)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6176)
位于java.lang.reflect.Method.invoke(本机方法)
在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
原因:java.lang.NullPointerException:尝试调用虚拟机
方法“android.view.view android.view.view.findViewById(int)”在
空对象引用
在
com.sim.buttonBarnavigationAndFragment.MainActivity.onCreate(MainActivity.java:56)
位于android.app.Activity.performCreate(Activity.java:6679)
在
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2741)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6176)
位于java.lang.reflect.Method.invoke(本机方法)
在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
}cardView实例为空。您确定id CardViewIndialofFragment在您的布局中是正确的id吗?CardView是活动布局或片段布局的一部分?
findViewById
在方法之外,而它不会在方法之外work@Alex这是正确的id。CardView在片段内。不能使视图为静态。您需要在片段中分配CardViewBlankFragment.view
在编辑器中仍然为空。我创建了一个公共静态视图代码>在片段类中,并在onCreateView
编辑后返回此:返回视图=充气机.inflate(R.layout.fragment\u blank,container,false)代码>,并尝试访问v
public CardView view;
public View onCreateView(...) {
View view = inflater.inflate(R.layout.fragment_blank, container, false);
cardView = (CardView)
view.findViewById(R.id.cardViewInDialogFragment);
openDialogFragment();
return view;