首页 文章

尝试在DialogFragment中使用CardView的getLayoutParams时“尝试在空对象引用上调用虚方法”?

提问于
浏览
-1

我正在尝试在 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 回答

  • 0
    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;
    

    }

相关问题