0

原代码已被删除,显示新的工作代码。代码背后的想法是在布局中创建一个新的 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。谢谢大家的帮助。

4

1 回答 1

0

正如文辉所说,你在按钮的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++;
    }
});
于 2013-07-23T23:30:04.353 回答