Доступ к не финальным значениям внутри анонимного внутреннего класса

У меня есть эти 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
            }
        });
Другие вопросы по тегам