亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

view.findViewById() 在一個函數中返回 null 但在另一個函數中工作正常

view.findViewById() 在一個函數中返回 null 但在另一個函數中工作正常

元芳怎么了 2022-12-21 12:44:43
我試圖在單擊按鈕時調用的函數中使用 view.findViewById() 獲取 TextView 對象。在 onClickButton() 中返回 null,而在其他函數 setDefaultValues() 中它工作正常。Activity1.javapublic class Activity1 extends AppCompatActivity {    private final Double TIP = 10.0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_1);        setDefaultValues();    }    private void setDefaultValues() {        TextView tipView = findViewById(R.id.tipView);       tipView.setText(getString(R.string.main_msg_tip,Double.toString(TIP)));    }    public void onClickToggleButton(View view){        TextView tipView = view.findViewById(R.id.tipView);        switch (view.getId()) {            case (R.id.toggleButtonBad):                tipView.setText(getString(R.string.main_msg_tip, Double.toString(BAD)));                break;            }}測試應用程序時顯示以下錯誤消息:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object referenceat com.example.chandan.learning.Activity1.onClickToggleButton編輯:該activity_1.xml文件確實包含TextView帶有tipViewid 的元素,因此 XML 文件中不存在元素的理論不成立。
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

復制代碼是一種不好的做法。現在你有重復的方法findViewById。為避免這種情況,您應該在類中創建一個全局變量Activity1。這也將是您的問題的解決方案:


public class Activity1 extends AppCompatActivity {

    private final Double TIP = 10.0;

    private TextView tipView;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_1);

        setDefaultValues();

    }


    private void setDefaultValues() {

        tipView = findViewById(R.id.tipView);

        tipView.setText(getString(R.string.main_msg_tip, Double.toString(TIP)));

    }


    public void onClickToggleButton(View view) {

        switch (view.getId()) {

            case (R.id.toggleButtonBad):

                tipView.setText(getString(R.string.main_msg_tip, Double.toString(BAD)));

                break;

        }

    }

}


查看完整回答
反對 回復 2022-12-21
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

您正在嘗試從單擊視圖(例如按鈕)中查找視圖,而“tipView”位于主視圖容器中。所以更新你的方法“onClickToggleButton”如下:


    public void onClickToggleButton(View view) {

        TextView tipView = findViewById(R.id.tipView);

        switch (view.getId()) {

            case (R.id.toggleButtonBad):

             tipView.setText(getString(R.string.main_msg_tip, Double.toString(BAD)));

            break;

        }

    }


查看完整回答
反對 回復 2022-12-21
  • 2 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號