我有一个应用程序,动态创建一行3个edittexts并将它们放在一个列表中,这样我就可以“玩”它们的值。例如,如果我想在第一行调用价格,我只是做预处理[ 0]。简而言之,它是一种带有产品名称,数量和价格字段的购物清单。我已经设置它以检测文本何时被更改(文本观察者),以便它实时计算总数,所以我知道人们何时在edittexts上写,但我不知道他们何时在最后输入一排edittexts。
我现在想要的是:当最后一行被点击/聚焦/在其中输入文本以调用produsnou()并自动创建一行新的Edittexts。正如我所说,我的问题是我不知道如何检测他们何时打字或点击或聚焦在最后一行。 这是我创建新的editexts行的方式。
public void produsnou() {
LinearLayout l1 = (LinearLayout) findViewById(R.id.layout1);
EditText et = new EditText(this);
et.setHint("Produs");
l1.addView(et);
et.addTextChangedListener(this);
et.setId(997);
LinearLayout l2 = (LinearLayout) findViewById(R.id.layout2);
EditText et2 = new EditText(this);
et2.setHint("Cantitate");
et2.setInputType(InputType.TYPE_CLASS_NUMBER
| InputType.TYPE_NUMBER_FLAG_DECIMAL);
et2.setId(998);
allcant.add(et2);
l2.addView(et2);
et2.addTextChangedListener(this);
LinearLayout l3 = (LinearLayout) findViewById(R.id.layout3);
EditText et3 = new EditText(this);
et3.setHint("Pret");
et3.setInputType(InputType.TYPE_CLASS_NUMBER
| InputType.TYPE_NUMBER_FLAG_DECIMAL);
l3.addView(et3);
et3.setId(999);
allpret.add(et3);
et3.addTextChangedListener(this);
}
我做了这个并且它不起作用:
public void onFocusChange(View view, boolean hasFocus) {
LinearLayout l3 = (LinearLayout) findViewById(R.id.layout3);
if (hasFocus &&
l3.getChildAt(l3.getChildCount() ) == view) {
produsnou();
}
}
答案 0 :(得分:1)
您可以使用OnFocusChangeListener
来实现此目的。在监听器中,您可以看到,如果视图是LinearLayout
中的最后一个,如下所示:
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus &&
linearLayout.getChildAt(linearLayout.getChildCount() - 1) == view) {
produsnou();
}
}