为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号