从对话框创建按钮时

时间:2013-07-23 22:47:56

标签: android button dialog

原始代码已删除,显示新的工作代码。代码背后的想法是在布局中创建一个新的textView,该布局具有用户提供的自定义名称。以前,NPE错误正在发生。这是一个修复。如有任何问题,请随时询问。

编辑:找到解决方案

修复需要如下:

accountEdit = new EditText(this); // accountEdit needs to be a global variable

然后在builder.setPositiveButton

builder.setPositiveButton(R.string.btn_save, new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dInterface, int whichButton)
        {

            LinearLayout lineLayout = (LinearLayout)findViewById(R.id.linear_layout);

            String newAccountName = accountEdit.getText().toString();

            newTextView = new TextView( getBaseContext()    );


            newTextView.setVisibility(View.VISIBLE);
            newTextView.setText(    newAccountName    );
            newTextView.setId(id);
            newTextView.setTextSize(35);

            newTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    onClickNew(view);
                }
            });
            newTextView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    Toast.makeText(getBaseContext(), "Testing" , Toast.LENGTH_LONG).show();
                    return true;
                }
            });

这将创建按钮,并将按钮名称设置为对话框中EditText中的信息。以前,EditText来自另一个活动,被称为错误,导致了NPE。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

正如Wenhui所说,你在按钮的onclick监听器中调用finViewById,因此使用了错误的上下文。在以下示例中执行此操作:

final EditText accountEdit    =   (EditText)findViewById(R.id.newAccountButton);
final String newAccountName   =   accountEdit.getText().toString();
final LinearLayout lineLayout = (LinearLayout)findViewById(R.id.linear_layout);
builder.setPositiveButton(R.string.btn_save, new DialogInterface.OnClickListener(){
    public void onClick(DialogInterface dInterface, int whichButton)
    {
        newTextView = new TextView(getBaseContext());

        newTextView.setVisibility(View.VISIBLE);
        newTextView.setText("Test");
        newTextView.setId(id);
        newTextView.setTextSize(35);

        newTextView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                onClickNew(view);
            }
        });

        lineLayout.addView(newTextView);
        id++;
    }
});