[英]Accessing non-final values inside anonymous inner class
I have these 5 Edittext fields and I want to write these values in database using a button. 我有这5个Edittext字段,我想使用一个按钮在数据库中写入这些值。 For button Clicklistener i've used anonymous inner class but only final values are allowed, that means I will get empty fields while writing in database.
对于按钮Clicklistener,我使用了匿名内部类,但只允许使用最终值,这意味着在数据库中写入时将得到空字段。 How can I access these fields as non-final?
如何以非最终方式访问这些字段? Is there any way?
有什么办法吗?
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EditText yardarea = (EditText)view.findViewById(R.id.yardarea);
String areaofyard = yardarea.getText().toString();
EditText brick = (EditText)view.findViewById(R.id.brick);
final String brickused = brick.getText().toString();
EditText rcc = (EditText)view.findViewById(R.id.rcc);
final String rccused = rcc.getText().toString();
EditText overhead = (EditText)view.findViewById(R.id.overhead);
final String ovhh = overhead.getText().toString();
EditText underground = (EditText)view.findViewById(R.id.underground);
final String ung = underground.getText().toString();
Button button = (Button) view.findViewById(R.id.register);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(getActivity().getApplicationContext());
databaseAccess.open();
databaseAccess.insertIntoCriteriaTable(areaofyard, brickused, rccused, ovhh, ung );
databaseAccess.close();
}
});
}
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final EditText yardarea = (EditText)view.findViewById(R.id.yardarea);
final EditText brick = (EditText)view.findViewById(R.id.brick);
final EditText rcc = (EditText)view.findViewById(R.id.rcc);
final EditText overhead = (EditText)view.findViewById(R.id.overhead);
final EditText underground = (EditText)view.findViewById(R.id.underground);
Button button = (Button) view.findViewById(R.id.register);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String areaofyard = yardarea.getText().toString();
String brickused = brick.getText().toString();
String rccused = rcc.getText().toString();
String ovhh = overhead.getText().toString();
String ung = underground.getText().toString();
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(getActivity().getApplicationContext());
databaseAccess.open();
databaseAccess.insertIntoCriteriaTable(areaofyard, brickused, rccused, ovhh, ung );
databaseAccess.close();
}
});
}
You can just declare the EditText objects as final or you can also declare them as global variables and in onclick of button use the same code posted above. 您可以将EditText对象声明为final,也可以将它们声明为全局变量,并在按钮的onclick中使用上面发布的相同代码。
try this declare EditText as global 试试这个,将EditText声明为global
EditText yardarea , brick , rcc, overhead , underground;
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
yardarea = (EditText)view.findViewById(R.id.yardarea);
brick = (EditText)view.findViewById(R.id.brick);
rcc = (EditText)view.findViewById(R.id.rcc);
overhead = (EditText)view.findViewById(R.id.overhead);
underground = (EditText)view.findViewById(R.id.underground);
Button button = (Button) view.findViewById(R.id.register);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String areaofyard = yardarea.getText().toString();
String brickused = brick.getText().toString();
String rccused = rcc.getText().toString();
String ovhh = overhead.getText().toString();
String ung = underground.getText().toString();
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(getActivity().getApplicationContext());
databaseAccess.open();
databaseAccess.insertIntoCriteriaTable(areaofyard, brickused, rccused, ovhh, ung );
databaseAccess.close();
}
});
}
How about putting getting the string in the onClickListener instead? 如何将字符串放入onClickListener中呢?
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState);
公共无效onViewCreated(视图视图,@Nullable捆绑保存的instanceState){super.onViewCreated(视图,SavedInstanceState);
EditText yardarea = (EditText)view.findViewById(R.id.yardarea); EditText brick = (EditText)view.findViewById(R.id.brick); EditText rcc = (EditText)view.findViewById(R.id.rcc); EditText overhead = (EditText)view.findViewById(R.id.overhead); EditText underground = (EditText)view.findViewById(R.id.underground); Button button = (Button) view.findViewById(R.id.register); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String areaofyard = yardarea.getText().toString(); String brickused = brick.getText().toString(); String rccused = rcc.getText().toString(); String ovhh = overhead.getText().toString(); String ung = underground.getText().toString(); DatabaseAccess databaseAccess = DatabaseAccess.getInstance(getActivity().getApplicationContext()); databaseAccess.open(); databaseAccess.insertIntoCriteriaTable(areaofyard, brickused, rccused, ovhh, ung ); databaseAccess.close(); } }); }
You should get the value from edittext inside onClick
final EditText yardarea = (EditText)view.findViewById(R.id.yardarea);
final EditText brick = (EditText)view.findViewById(R.id.brick);
final EditText rcc = (EditText)view.findViewById(R.id.rcc);
final EditText overhead = (EditText)view.findViewById(R.id.overhead);
final EditText underground = (EditText)view.findViewById(R.id.underground);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String brickused = brick.getText().toString();
String rccused = rcc.getText().toString();
String ovhh = overhead.getText().toString();
String areaofyard = yardarea.getText().toString();
String ung = underground.getText().toString();
// Do your database operation with these value
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.