簡體   English   中英

當我使用findViewById時,將R.id. [value]的int作為類的構造函數參數傳遞給NPE

[英]Passing int from R.id.[value] as a class constructor argument gives an NPE when I use findViewById

當我嘗試創建一個為每個按鈕實現onTouch和onClick事件的按鈕處理類時,我遇到了一個問題。 以下組合有效(ButtonClick是我的課程):

/*Constructor*/
public ButtonClick(View v, int clickType){
    if(clickType == 0){
        v.setOnClickListener(this);
    }
    else{
        v.setOnTouchListener(this);
    }
}

/*Call from Main.java*/
ButtonClick button = new ButtonClick(findViewById(R.id.button, 1);

但是,以下內容給了我NPE

/*Constructor*/
public ButtonClick(int buttonId, int clickType){
    if(clickType == 0){
        findViewById(buttonId).setOnClickListener(this);
    }
    else{
        findViewById(buttonId).setOnTouchListener(this);
    }
}

/*Call from Main.java*/
ButtonClick button = new ButtonClick(R.id.button, 1);

為什么至少在這種情況下,如果不返回NPE,就不能將R配置文件中的整數值作為參數傳遞呢?

問題在於id ,而是findViewById()
在調用此方法之前,應“放大”“布局”。 即,將布局XML文件實例化為其相應的View對象。 在一個Activity中,通常setContentView()完成這項工作。 否則,我們可以將LayoutInflater用於相同的目的。
重要的一點是,我們得到的充氣實例已連接到當前上下文。 因此,在另一個上下文中,我們獲得了空的視圖。

暫無
暫無

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

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