如何自动将textview的值分配给字符串

时间:2019-02-17 13:25:49

标签: java android

我要自动将editext值分配给字符串

当我单击它分配的按钮但不是自动

private void OverValidation()
    {

        if (!noOfOvers.equals("0"))
        {
            noOfOvers=chooseOverEdttext.getText().toString();
        }
        else
        {
            Toast.makeText(getActivity(), "Please choose no of overs", Toast.LENGTH_SHORT).show();
        }
    }

我想要在编辑文本中输入文本时同时为字符串分配值

5 个答案:

答案 0 :(得分:0)

您可能要使用TextView#addTextChangedListenerdocumentation)。
很简单。

chooseOverEdttext.addTextChangedListener(
   new TextWatcher() {
      @Override
      public void onTextChanged(
              final CharSequence text,
              final int start, 
              final int before, 
              final int count) {
         final String noOfOvers = text.toString();
         // Process your String, or use CharSequence directly
      }

      @Override
      public void beforeTextChanged(
              final CharSequence text, 
              final int start, 
              final int count, 
              final int after) { }

      @Override
      public void afterTextChanged(final Editable editable) {
         // Editable represents the changed text. If you need to process
         // the inserted text and modify it, you can apply these modifications
         // here, directly to the Editable instance. Be carefult as it might be called recursively.
      }
   }
);

如果您经常使用TextWatcher,您可能还想创建一个Adapter,它是将这三种方法实现为无操作的基类。这样一来,您将只能覆盖您感兴趣的那个。更干净!

答案 1 :(得分:0)

您可以尝试使用Data Binding Library。它具有用于连接视图和数据源的功能。

例如,您可以在Activity中包含一个ObservableString:

ObservableField<String> noOfOvers = new ObservableField<String>()

然后,在您的xml内,应为此数据添加一个绑定:

<layout 
  xmlns:android=”http://schemas.android.com/apk/res/android"
  xmlns:tools=”http://schemas.android.com/tools">
  <data>
    <import type="android.databinding.ObservableField"/>
    <variable name="noOfOvers" type="ObservableField<String>"
  </data>
  <LinearLayout
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:orientation=”vertical”>
    <EditText
      android:layout_width=”match_parent”
      android:layout_height=”wrap_content”
      android:text=”@{noOfOvers}”/>
  </LinearLayout>
</layout>

现在,一旦您在EditText中进行了更改,它的值就会自动分配给noOfOvers变量。

答案 2 :(得分:0)

您可以将更改侦听器添加到您的edittext,然后将字符串设置为您的edittext或其他内容

youredittext.addTextChangedListener(new TextWatcher() {

 @Override
 public void afterTextChanged(Editable s) {}

 @Override    
 public void beforeTextChanged(CharSequence s, int start,
 int count, int after) {
 }

 @Override    
   public void onTextChanged(CharSequence s, int start,
   int before, int count) {
    if(s.length() != 0)
    field2.setText("");
 }
 });

答案 3 :(得分:0)

您可以通过使用addTextChangedListener上的EditText获得自动更新。这是示例。

x = (EditText) findViewById(R.id.x);
x.addTextChangedListener(
new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                String tmp = editable.toString();
                if(!tmp.equals(""))
                    h = Double.parseDouble(tmp);
            }
        });

答案 4 :(得分:0)

您可以通过将textchangeListner添加到editText来实现。

这是您的代码的正确实现:

 chooseOverEdttext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            setString();

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
 });

  private void setString(){
    String overs=chooseOverEdttext.getText().toString(); 
    if (!(TextUtils.isEmpty(overs)||overs.equals("0")))
    {
        noOfOvers=overs;
    }


  }

只需复制并粘贴此代码即可代替当前代码