Доступ к не финальным значениям внутри анонимного внутреннего класса
У меня есть эти 5 полей Edittext, и я хочу записать эти значения в базу данных с помощью кнопки. Для кнопки Clicklistener я использовал анонимный внутренний класс, но разрешены только конечные значения, то есть я получу пустые поля при записи в базу данных. Как я могу получить доступ к этим полям как не финальный? Там в любом случае?
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();
}
});
}
4 ответа
Попробуйте объявить EditText глобальным
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();
}
});
}
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();
}
});
}
Вы можете просто объявить объекты EditText как final или вы также можете объявить их как глобальные переменные и при нажатии кнопки использовать тот же код, который был приведен выше.
Как насчет того, чтобы вместо этого получить строку в onClickListener?
public void onViewCreated (представление View, @Nullable Bundle saveInstanceState) { super.onViewCreated(view, saveInstanceState);
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
}
});