2016-11-22 47 views
2

我是新来的Android编程,我想我最大的问题是,我真的不能换我的脑海里围绕这一切的充气东西。你能帮我解决这个问题吗?的EditText的getText()总是返回空字符串

我正在一个形式,形式内容分隔成不同的网页。在进入表单的下一页之前,您需要填写所有必填的EditText。所以当点击“下一步”按钮时,我想要检查表单edittexts是否为空输入。如果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上是空的。 如果是,我想围绕它绘制边框。 显然,如果(edt.getText()。toString()。trim()。length()== 0)始终为真。 该法边境()就是从这里称为:

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()我循环通过一个孩子的意见,并把把它们放到我的边框方法。 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()中看到的一切都是由小组成员创建的,我真的不知道发生了什么 -

我希望你能帮助我!

预先感谢您!

+0

你在那个'EditText'中输入了什么? –

+0

您是否检查了是否迭代了正确的孩子,如果有一个EditText,如果这是正确的,如果文本输入正确,如果您的drawable是正确的,...?这不是一个[mcve],你能限制这个代码到一个简单的snipet吗? – AxelH

+0

@IulianPopescu你的意思是测试?随机字母主要 – kalu

回答

-1

这段代码检查:

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

可悲的结果仍然是一样的。我觉得我错过了一些重要的东西,比如先保存输入或者膨胀/声明somethinf?因为所有类型的输入都被忽略 – 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" /> 

或所有的onCreate布局文件合并到一个单一的布局,然后手动到的setContentView布局文件

+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(INT layoutResID)

设置从布局资源的活动内容。资源将被夸大,将所有顶级视图添加到活动中。

+0

你的意思是“含有”吗? (对不起,英语不是我的第一语言),我可以使用标签吗? – kalu

+0

连接(增加一个紧挨着另一个)。如果您还需要其他布局,可以将这些布局包含到新文件中。如果你不这样做,只需将布局粘贴到一个文件中(小心不要打破布局逻辑)。 – AxelH

+0

我有所有视图单独的XML文件...我应该只有一个文件的所有我的布局和使用setContView()这个文件? – kalu

相关问题