原始代码已删除,显示新的工作代码。代码背后的想法是在布局中创建一个新的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。谢谢你的帮助。
答案 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++;
}
});