[英]EditText getText() always returns empty string
我是android編程的新手,我認為我最大的問題是我無法真正解決所有這些膨脹的問題。 你能幫我這個嗎?
我正在處理表單,表單內容分為不同的頁面。 在繼續進行表格的下一頁之前,您需要填寫所有必填的EditText。 因此,當單擊“下一步”按鈕時,我想檢查表單編輯文本是否為空輸入。 如果Edittexts保留為空,則會在它們周圍繪制邊框,您將無法繼續。
我的問題是,即使我填寫了一些Edittext,它們仍然始終被視為空白。 所以我填寫它們,單擊“下一步”按鈕,然后在每個周圍畫一個邊框,無論是否為空。
基本上這是導致問題的方法:
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是否為空。 如果是,我想在它周圍畫一個邊框。 顯然如果(edt.getText()。toString()。trim()。length()== 0)始終為true。 從此處調用方法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);
}
}
在這里,我要確保先檢查輸入,然后才能繼續進行表單的下一部分。
這是我的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()中看到的所有內容都是由小組成員創建的,我真的不知道發生了什么事-
我希望你能幫幫我 !
先感謝您!
嘗試這個..
在onCreate之外聲明(范圍仍在類內)
private EditText phone;
然后在onCreate中進行初始化(在初始化之前,請確保使用setContentView設置了相應的布局)
phone = (EditText) findViewById(R.id.phonenr_et);
並在方法checkInput中將其用作
phone.getText().equals("");
嘗試將其他布局作為以下xml代碼包含在布局文件中,然后在onCreate中將ContentView設置為單個布局文件。
<include layout="@layout/content_main" />
或將所有布局文件手動組合為一個布局,然后在onCreate中將ContentView設置為布局文件
您的問題是您的布局(糟糕的小組成員;))。
您正在使用四個時間setContentView
因此僅保留最后一個。
setContentView(R.layout.activity_main);
setContentView(R.layout.content_main);
setContentView(R.layout.job_hiring_data1);
setContentView(R.layout.job_hiring_data2);
使用將這些布局連接起來的布局,這應該會有所幫助。
void setContentView(int layoutResID)
從布局資源設置活動內容。 資源將被擴展,將所有頂級視圖添加到活動中。
通過以下代碼檢查它:
edittext.getText().toString().equalsIgnoreCase("")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.