Как отключить элемент управления EditText во время загрузки активности и включить его действием пользователя

У меня есть загружаемое действие с несколькими элементами управления EditText и кнопкой. Элементы управления EditText отображают значения из базы данных SQLlite. Я хочу, чтобы элементы управления EditTtext были доступны только для чтения (даже не кликабельны) при загрузке активности, а затем становились доступными для редактирования/кликабельности, когда пользователь нажимает кнопку.

Я прочитал кучу других тем здесь, и кажется, что вы можете сделать это несколькими разными способами.

  1. Отключить управление в XML и включить в коде (действие пользователя)
  2. Отключить элемент управления в коде (onCreate) и включить в коде (действие пользователя)

Прямо сейчас я не могу получить любой способ работать. Кажется, что если я отключу его, я никогда не смогу снова включить его для пользовательского ввода. И если я включу его, он всегда будет включен, и я никогда не смогу его отключить.

Вот мой текущий код:

XML - это элемент управления, который я хочу отключить, пока пользователь не сделает что-то (нажимает кнопку)

        <EditText
            android:layout_width="0dp"
            android:layout_weight="1.5"
            android:layout_height="wrap_content"
            android:cursorVisible="true"
            android:editable="false"
            android:inputType="numberDecimal"
            android:id="@+id/itemPrice"/>
    </TableRow>
    <!-- End Item Price -->

JAVA — это код, который просто очищает форму/пользовательский интерфейс и пытается включить 2 поля EditText для пользовательского ввода.

//Add item to the inventory.  Enables the EditText control for user intput (name and price)
public void addNewItem(View view)
{
    try
    {
        //Clear the fields on the form/UI
        itemId.setText("");
        itemName.setText("");
        itemPrice.setText("");
        itemDelete.setText("");

        //Enable the controls
        itemName.setEnabled(true);
        itemPrice.setEnabled(true);
        itemName.setFocusable(true);
        itemPrice.setFocusable(true);
        itemName.setClickable(true);
        itemPrice.setClickable(true);
    }
    catch(Exception erMsg)
    {
        erMsg.printStackTrace();
    }
}

У меня все еще есть setEnabled(true) для каждого элемента управления, хотя он никогда не отключался, но последний код просто пытается что-то сделать, чтобы включить его.

Я не хочу делать этот вопрос субъективным, но есть ли лучший способ, если есть приоритет (XML или Java)? Например, если XML устанавливает для поля значение :focusable:false, а Java устанавливает поле setFocusable(true), существует ли приоритет?


person GIZNAJ    schedule 11.01.2016    source источник


Ответы (2)


вы можете установить android:editable динамически, после завершения загрузки, как android:editable ="true"

person 杨东冀    schedule 11.01.2016
comment
Я смущен вашим ответом. Я установил для 2 полей значение editable=false в XML (когда он загружается), и теперь я хочу, чтобы 2 поля были редактируемыми. Для элементов управления EditText нет редактируемого метода. Как вы предлагаете включить его динамически? Пожалуйста, поместите XML/код - person GIZNAJ; 11.01.2016

Я положу ответ здесь, так как кажется, что этот вопрос задают много, и ответы никогда не понимаются и не ясны.

Вот как я это сделал без использования XML

В методе onCreate() я отключил пользовательский ввод с помощью следующего кода:

//Disable the itemName control
        itemName.setInputType(InputType.TYPE_NULL);
        itemName.setFocusable(false);

        //Disable the itemPrice control
        itemPrice.setInputType(InputType.TYPE_NULL);
        itemPrice.setFocusable(false);

Я включил элементы управления после того, как пользователь нажал кнопку, но это не было сделано в actionListener для кнопки, просто метод, который вызывается при нажатии кнопки.

//Enable the controls
            itemName.setInputType(InputType.TYPE_CLASS_TEXT);
            itemName.setFocusableInTouchMode(true);
            itemName.setFocusable(true);

        itemPrice.setInputType(InputType.TYPE_CLASS_TEXT);
        itemPrice.setFocusableInTouchMode(true);
        itemPrice.setFocusable(true);

Это полностью работает, и когда EditText не включен для редактирования, он все еще виден (не отображается серым цветом, когда setDisabled (true)

person GIZNAJ    schedule 20.01.2016