我是Android编程的新手,我认为我最大的问题是我无法真正理解所有这些膨胀的东西。你能帮我解决这个问题吗?
我正在处理表单,表单内容分成不同的页面。在进入表单的下一页之前,您需要填写所有必填的EditTexts。那么当" next"单击按钮,我想检查我的表单edittexts为空输入。如果Edittexts保留为空,则会在它们周围绘制边框,您无法继续。
我的问题是,即使我填写了一些Edittexts,它们仍然被认为是空的。所以我填写它们,点击" next"按钮,并在每个按钮周围绘制边框,无论是否为空。
基本上这是导致问题的方法:
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)总是如此。 方法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()中,我循环浏览视图Child并将它们放入我的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);
}
我需要&#34;膨胀&#34; Edittext首先还是什么?老实说,这是一个小组项目,所以在OnCreate()中看到的一切都是由一个小组成员创建的,我真的不知道那里发生了什么 -
我希望你能帮助我!
提前谢谢!
答案 0 :(得分: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中的布局文件
答案 1 :(得分:0)
你的问题是你的布局(坏组成员;))。
您正在使用四次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)
从布局资源设置活动内容。资源将被夸大,将所有顶级视图添加到活动中。
答案 2 :(得分:-1)
通过以下代码检查:
insert into #step values(2,19,20);
insert into #step values(1,2,10);
insert into #step values(19,5,100);
insert into #step values(5,16,200);
insert into #step values(4,5,50);
insert into #step values(16,4,500); -- add this to check we dont go further once we reach 16
declare @start int = 2;
declare @end int = 16;
with cte(nrTo, val) as
(
select nrTo, value
from #step
where nrFrom = @start
union all
select #step.nrTo, value
from cte
inner join #step on #step.nrFrom = cte.nrTo
and #step.nrFrom != @end
)
select sum(val)
from cte