我是 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);
}
}
}
所以我想检查(如果给定的 View 是一个 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() 中,我循环遍历 subview 并将它们放入我的 Border Method 中。 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() 中看到的所有内容都是由小组成员创建的,我真的不知道那里发生了什么 -
我希望你能帮助我!
提前致谢!
最佳答案
你的问题是你的布局(坏组成员;))。
您使用了四次 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)
Set the activity content from a layout resource. The resource will be inflated, adding all top-level views to the activity.
关于java - EditText getText() 总是返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739862/