2

我有一个应用程序,它动态创建一行 3 个编辑文本并将它们放在一个列表中,以便我可以“玩”它们的值。例如,如果我想在第一行调用价格,我只是做 pret[0]。简而言之,它是一种包含产品名称、数量和价格字段的购物清单。我已经设置它来检测文本何时被更改(文本观察器),以便它实时计算总数,所以我知道人们什么时候在编辑文本上写,但我不知道他们什么时候在最后输入编辑文本行。

我现在想要的是:当最后一行被单击/聚焦/在其中输入文本以调用 produsnou() 并自动创建一个新的 Edittext 行。正如我所说,我的问题是我不知道如何检测他们何时键入、单击或关注最后一行。这是我创建新的编辑文本行的方式。

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(); } }

4

1 回答 1

1

您可以使用 anOnFocusChangeListener来实现此目的。在侦听器中,您可以找出视图是否是最后一个视图,LinearLayout如下所示:

public void onFocusChange(View view, boolean hasFocus) {
    if (hasFocus && 
            linearLayout.getChildAt(linearLayout.getChildCount() - 1) == view) {
        produsnou();
    }
}
于 2013-06-11T12:22:28.270 回答