Android 错误:无法在其他方法中定义的内部类中引用非最终变量名
你好,我的朋友)我在班上有下一个错误Android 错误:无法在其他方法中定义的内部类中引用非最终变量名,android,textview,onclicklistener,android-alertdialog,Android,Textview,Onclicklistener,Android Alertdialog,你好,我的朋友)我在班上有下一个错误 public class AlertDlg { public static void AlertShow(final Activity activity, EditText name, EditText track) { LayoutInflater inflater = activity.getLayoutInflater(); View alertLayout = inflater.inflate(R.layout.layout_cust
public class AlertDlg {
public static void AlertShow(final Activity activity, EditText name, EditText track)
{
LayoutInflater inflater = activity.getLayoutInflater();
View alertLayout = inflater.inflate(R.layout.layout_custom_dialog, null);
name = (EditText) alertLayout.findViewById(R.id.et_name);
track = (EditText) alertLayout.findViewById(R.id.et_track);
AlertDialog.Builder alert = new AlertDialog.Builder(activity);
alert.setTitle("Add track number");
//alert.setIcon(R.drawable.plus);
alert.setView(alertLayout);
alert.setCancelable(false);
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(activity.getBaseContext(), "Abort", Toast.LENGTH_SHORT).show();
}
});
alert.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ERROR HERE--->String sname = name.getText().toString();
//String track = etPassword.getText().toString();
Toast.makeText(activity.getBaseContext(), "Name: " + sname +" "+ " Track: " , Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = alert.create();
dialog.show();
}}
错误:无法在其他方法中定义的内部类中引用非最终变量名。我正试图从编辑文本中获取数据。但是得到这个错误
调用方法:
AlertDlg.AlertShow(MainActivity.this,name,track);
移除内部类,将其用作活动中的函数
public void AlertShow()
{
Context mContext = this;
LayoutInflater inflater = getLayoutInflater();
View alertLayout = inflater.inflate(R.layout.layout_custom_dialog, null);
final EditText name = (EditText) alertLayout.findViewById(R.id.et_name);
//final EditText track = (EditText) alertLayout.findViewById(R.id.et_track);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Add track number");
//alert.setIcon(R.drawable.plus);
alert.setView(alertLayout);
alert.setCancelable(false);
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(mContext, "Abort", Toast.LENGTH_SHORT).show();
}
});
alert.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String sname = name.getText().toString();
//String track = etPassword.getText().toString();
Toast.makeText(mContext, "Name: " + sname +" "+ " Track: " , Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = alert.create();
dialog.show();
}
那么就称之为:
AlertShow();
使
name
成为final
类似publicstaticvoidalertshow(最终活动活动、最终编辑文本名称、最终编辑文本曲目)
有趣的是,他一直在为活动做准备,然后我在这里得到一个错误:name=(EditText)alertLayout.findViewById(R.id.et_name)代码>错误:无法指定最终的局部变量名称。它必须为空且不使用复合赋值
,那么为什么不将该方法复制到调用它的类中呢?您应该使用片段来简化代码并使其更干净,在使用活动的外部类中使用静态方法不是很好!