2016-11-22 5 views
2

Я новичок в программировании на Android, и я думаю, что моя самая большая проблема заключается в том, что я не могу полностью обдумать все эти раздувающиеся вещи. Можете ли вы помочь мне с этим?EditText getText() всегда возвращает пустую строку

Я работаю над формой, содержимое форм разделено на разные страницы. Прежде чем перейти к следующей странице формы, вам необходимо заполнить все обязательные EditTexts. Поэтому, когда нажата кнопка «next», я хочу, чтобы моя форма edittexts была проверена на пустой вход. Если Edittexts оставлены пустыми, вокруг них нарисована граница, и вы не можете продолжить.

Моя проблема в том, что даже если я заполню некоторые редакторы, они все еще всегда воспринимаются как пустые. Поэтому я заполняю их, нажимаю кнопку «Далее», и вокруг каждого рисуется граница, независимо от того, пуст или нет.

в основном это метод вызывает проблему:

public void Border(View view){ 

    if (view instanceof EditText) { 

     EditText edt = (EditText) view; 


     if (edt.getText().toString().trim().length() == 0) { 
     edt.setBackgroundResource(R.drawable.border); 
     } 
    } 
} 

Так что я хочу, чтобы проверить (если данный вид является EditText) EditText пуст. Если да, я хочу нарисовать вокруг него границу. Очевидно, что if (edt.getText(). ToString(). Trim(). Length() == 0) всегда истинно. Метод Border() вызывается здесь:

public boolean CheckInput(View v) { 
    EditText phone = (EditText) findViewById(R.id.phonenr_et); 
    EditText email = (EditText) findViewById(R.id.email_et); 
    CheckBox box = (CheckBox) findViewById(R.id.agreement_checkbox); 

    if (v.getId() != R.id.job_hunting_btn) { 

     LinearLayout layout = (LinearLayout) findViewById(R.id.job_hunt_lay); 

     if (layout.getChildCount() != 0) { 
      for (int i = 0; i < layout.getChildCount(); i++) { 
       View view = layout.getChildAt(i); 
       Border(view); // <-- Border is called 
      } 
     } 
    } 
     ... 
     } 

В CheckInput() Я перекручивание через мнения детей и положить положить их в мой метод Border. CheckInput() называется здесь:

public void OnNextButtonClick(View v) { 
    if (CheckInput(v)) { 
     ViewList.get(CurrentViewId).setVisibility(View.GONE); 
     if (v.getId() == R.id.job_hiring_btn) 
      CurrentViewId = ArbeitgeberViewId; 
     else { 

      CurrentViewId++; 
      if (CurrentViewId == ArbeitgeberViewId) 
       CurrentViewId = LastViewId; 
     } 
     ViewList.get(CurrentViewId).setVisibility(View.VISIBLE); 
    } 
} 

Здесь я хочу, чтобы убедиться, что вы первый ваш Input проверены, прежде чем перейти к следующей части формы.

Вот мой OnCreate() Метод:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setContentView(R.layout.content_main); 
    setContentView(R.layout.job_hiring_data1); 
    setContentView(R.layout.job_hiring_data2); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    ViewList.add(findViewById(R.id.content_main_lo)); 


    ViewList.add(findViewById(R.id.job_hiring_data1_lo)); 
    ViewList.add(findViewById(R.id.job_hiring_data2_lo)); 
    ViewList.add(findViewById(R.id.job_hunt_lay)); 


    ArbeitgeberViewId = ViewList.size(); 


    ViewList.add(findViewById(R.id.offered_job_data1_lo)); 


    LastViewId = ViewList.size(); 
    ViewList.add(findViewById(R.id.formular_finished_lo)); 

    ImprintViewId = ViewList.size(); 
    ViewList.add(findViewById(R.id.imprint_lo)); 


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

мне нужно "раздувать" в EditText первый или что-то делать? Я честный, это групповой проект, поэтому все, что было в OnCreate(), было создано членом группы, и я действительно не знаю, что там происходит -

Надеюсь, вы можете мне помочь!

Спасибо заранее!

+0

Что вы вводите в этом 'EditText'? –

+0

Вы проверили, выполняете ли вы правильные дочерние элементы, если был один EditText, если это было правильно, если текст был правильно напечатан, если ваш drawable был прав, ...? И это не [mcve], можете ли вы ограничить этот код простым snipet? – AxelH

+0

@IulianPopescu Вы имеете в виду для тестирования? Случайные письма в основном – kalu

ответ

-1

проверить его этим кодом:

edittext.getText().toString().equalsIgnoreCase("") 
+0

К сожалению, все тот же результат. Я чувствую, что мне не хватает чего-то важного, например, сначала сохранить вклад или раздуть/объявить что-то? Поскольку все виды ввода игнорируются – kalu

+0

В чем разница с проверкой длины? – AxelH

0

Попробуйте это ..

Объявить вне OnCreate (сфера еще внутри класса)

private EditText phone; 

Затем инициализируется в OnCreate (убедитесь, соответствующая компоновка устанавливается с использованием setContentView до инициализации)

phone = (EditText) findViewById(R.id.phonenr_et); 

и использовать его внутри метода checkInput в

phone.getText().equals(""); 

пытаются включать другие макеты внутри файла макета в следующем коде XML, а затем setContentView в один файл макета в OnCreate.

<include layout="@layout/content_main" /> 

или объединить все файлы макета в одном макете вручную затем setContentView в файл макета в OnCreate

+0

Было бы лучше, если бы вы могли предоставить некоторые детали с монитора Android. – Azi

+0

Какой текущий выход? – Azi

0

Вы проблема ваши макеты (плохой член группы;)).

Вы используете четыре раза setContentView, так что только последний хранится.

setContentView(R.layout.activity_main); 
setContentView(R.layout.content_main); 
setContentView(R.layout.job_hiring_data1); 
setContentView(R.layout.job_hiring_data2); 

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

Official doc

недействительный setContentView (интермедиат layoutResID)

Установите содержание активности от ресурса макета. Ресурс будет завышен, добавив все виды верхнего уровня к активности.

+0

Вы имели в виду «содержать»? (Извините, английский не мой первый язык), и я делаю это с тегом ? – kalu

+0

Конкатенация (добавление одного рядом с другим). Если вам нужна эта компоновка где-то еще, вы можете включить их в новый файл. Если вы этого не сделаете, просто вставьте макеты в один файл (осторожно, чтобы не сломать логику компоновки). – AxelH

+0

У меня есть отдельные XML-файлы для всех просмотров ... У меня должен быть только один файл для всех моих макетов и использовать setContView() для этого файла? – kalu

Смежные вопросы