代码之家  ›  专栏  ›  技术社区  ›  CMaster

通过自定义对话框类中的方法访问EditText文本

  •  1
  • CMaster  · 技术社区  · 7 年前

    我有一个自定义的alertDialog类,并定义了一个setText()方法来设置EditText文本:

    public class CustomEditDialog extends AlertDialog {
    
    private Context context;
    private CustomEditText editTextTv;
    private CustomTextView titleTv;
    
    public CustomEditDialog(Context context) {
        super(context);
        this.context = context;
    }
    
    public CustomEditDialog(Context context, int themeResId) {
        super(context, themeResId);
        this.context = context;
    }
    
    protected CustomEditDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
        this.context = context;
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.editbox_dialog_layout);
    
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    
        titleTv = (CustomTextView)findViewById(R.id.title_tv);
        editTextTv = (CustomEditText)findViewById(R.id.edit_text_et);
    
    
    }
    
    
    public void setText(CharSequence text){
        editTextTv.setText(text);
    }
    
    public String getText(){
        return editTextTv.getText().toString();
    }
    
    
     }
    

    现在,当我在activity and access setText()方法中使用CustomEditDialog来填充edittext时:

    CustomEditDialog customEditDialog = new CustomEditDialog(context);
                    customEditDialog.setText("OK!!");
                    customEditDialog.show();
    

    我收到以下错误:

                                                                                 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.k.kh.CustomEditText.setText(java.lang.CharSequence)' on a null object reference                                  
    

    请帮帮我。

    1 回复  |  直到 7 年前
        1
  •  1
  •   muminers    7 年前

    出现此错误是因为您试图调用editTextTv。创建它之前,请执行setText()。 要解决它,你必须打电话。show()首先调用onCreate()并初始化CustomEditDialog视图:

    CustomEditDialog customEditDialog = new CustomEditDialog(context);
                customEditDialog.show();
                customEditDialog.setText("OK!!");