我正在尝试在 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);
}
是不可能还是我做错了什么?
UPDATE: cardView位于片段内 .
UPDATE 2:
将代码更改为以下时:
BlankFragment:
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);
}
,我收到此错误:
FATAL EXCEPTION:main进程:com.sim.buttombarnavigationandfragment,PID:10685 java.lang.RuntimeException:无法启动活动ComponentInfo {com.sim.buttombarnavigationandfragment / com.sim.buttombarnavigationandfragment.MainActivity}:java.lang.NullPointerException:Attempt在android.app.ActivityThread.handleLaunchActivity(在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2680)的空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)'( ActivityThread.java:2741)在Android.app.Handler.dispatchMessage的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1488)上的android.app.ActivityThread.-wrap12(ActivityThread.java)(Handler.java: 102)在android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6176),位于com.android的java.lang.reflect.Method.invoke(Native Method) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:888)at com.android.internal.os.Zy goteInit.main(ZygoteInit.java:778)引起:java.lang.NullPointerException:尝试在com.sim上的空对象引用上调用虚方法'android.view.View android.view.View.findViewById(int)'在android.app.ActivityChread的android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)的android.app.Activity.performCreate(Activity.java:6679)上的.buttombarnavigationandfragment.MainActivity.onCreate(MainActivity.java:56) . 在Android.app.A活动中运行android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2741)的androidLaunchActivity(ActivityThread.java:2331)在android.app.ActivityThread $ H.handleMessage(ActivityThread . )的android.app.ActivityThread.-wrap12(ActivityThread.java) . java:1488)在android.os.Handler.dispatchMessage(Handler.java:102)的android.app.Looper.loop(Looper.java:154)android.app.ActivityThread.main(ActivityThread.java:6176)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:888)at c om.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
1 回答
}