"Attempt to invoke virtual method on a null object reference"尝试在 DialogFragment 中获取 CardView 的 Card



我正在尝试在DialogFragment内设置CardView的大小,但出现此错误:

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);
}

是不可能还是我做错了什么?

更新:卡片视图位于片段内。

更新 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.buttombarnavigationandfragment, PID: 10685 java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.sim.buttombarnavigationandfragment/com.sim.buttombarnavigationandfragment.MainActivity}: java.lang.NullPointerException: Try to invoke virtual method 'android.view.View android.view.View.findViewById(int(' on a null 对象引用 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2680( 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2741( at android.app.ActivityThread.-wrap12(ActivityThread.java( 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488( at android.os.Handler.dispatchMessage(Handler.java:102( at android.os.Looper.loop(Looper.java:154( at android.app.ActivityThread.main(ActivityThread.java:6176( at java.lang.reflect.Method.invoke(Native Method( 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888( at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778( 由以下原因引起:java.lang.NullPointer异常:尝试调用虚拟 方法 'android.view.View android.view.View.findViewById(int(' 上 空对象引用 在 com.sim.buttombarnavigationandfragment.MainActivity.onCreate(MainActivity.java:56( at 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( at android.app.ActivityThread.-wrap12(ActivityThread.java( 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488( at android.os.Handler.dispatchMessage(Handler.java:102( at android.os.Looper.loop(Looper.java:154( at android.app.ActivityThread.main(ActivityThread.java:6176( at java.lang.reflect.Method.invoke(Native Method( 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888( at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778(

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;

}

最新更新