簡體   English   中英

自定義視圖中context為null

[英]context is null in custom view

我正在使用擴展HorizontalScrollView的自定義視圖,並通過以下代碼進行操作:

public BottomNavigation(Context context) {
    super(context, null, 0);
}

public BottomNavigation(Context context, AttributeSet attrs) {
    super(context, attrs, 0);
}

public BottomNavigation(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.context = context;
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    createItems();
}

public void createItems() {
    if (items < 4) {
        return;
    }
    height = getHeight();
    width = getWidth();
    paddingTop = height / 7;
    itemsHeight = height - paddingTop;
    itemsWidth = width / 4;
    requestLayout();
    views.clear();
    removeAllViews();
    LinearLayout linearLayout = new LinearLayout(context);
    linearLayout.setOrientation(LinearLayout.HORIZONTAL);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(height, ViewGroup.LayoutParams.WRAP_CONTENT);
    linearLayout.setLayoutParams(layoutParams);
    addView(linearLayout);
    for(int i=0;i<items;i++)
    {
        LinearLayout linearLayout1 = new LinearLayout(context);
        LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(height, itemsWidth);
        linearLayout1.setLayoutParams(layoutParams1);
        linearLayout1.setOrientation(LinearLayout.VERTICAL);
    }
}

但運行應用程序時出現此錯誤:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.amir_p.bottomnavigation3/com.example.amir_p.bottomnavigation3.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510)
      at android.app.ActivityThread.-wrap11(ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:148)
      at android.app.ActivityThread.main(ActivityThread.java:5459)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
      at android.view.ViewConfiguration.get(ViewConfiguration.java:366)
      at android.view.View.<init>(View.java:3794)
      at android.view.View.<init>(View.java:3898)
      at android.view.ViewGroup.<init>(ViewGroup.java:573)
      at android.widget.LinearLayout.<init>(LinearLayout.java:203)
      at android.widget.LinearLayout.<init>(LinearLayout.java:199)
      at android.widget.LinearLayout.<init>(LinearLayout.java:195)
      at android.widget.LinearLayout.<init>(LinearLayout.java:191)
      at com.example.amir_p.bottomnavigation3.BottomNavigation.createItems(BottomNavigation.java:68)
      at com.example.amir_p.bottomnavigation3.BottomNavigation.setItems(BottomNavigation.java:108)

調試后,我注意到上下文為空,但是為什么呢? 問題是什么?

您只能在三個構造函數之一中初始化context成員變量,並且顯然會調用其他兩個構造函數之一。

在自定義視圖中,您不需要自己存儲Context引用。 只要需要Context只需調用getContext()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM