如何在动态创建的editTexts集上设置onFocusChangeListener()?

时间:2013-08-15 18:07:22

标签: android dynamic runtime android-linearlayout

我有这个代码,每当前一个lineaLayout的edittext失去焦点时,我就会给包含3个editTexts的linearLayout充气。我想在最近创建的editTexts上使用onFocusChangeListener。相反,仅当第一个linearLayout失去焦点而不是其他其他人时,才会调用onFocusChangeListener。

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sale_purchase_vouch);
    no=0;
    for(int i=0;i<30;i++)
        flag[i]=true;

    save=(Button)findViewById(R.id.Save);
    save.setText("Confirm Purchase");
    LayoutInflater l=getLayoutInflater();
    container=(LinearLayout)findViewById(R.id.container);
    row[no]=(LinearLayout)l.inflate(R.layout.row, container);
    items[no]=(AutoCompleteTextView)row[no].findViewById(R.id.item);
    quants[no]=(EditText)row[no].findViewById(R.id.quant);
    rates[no]=(EditText)row[no].findViewById(R.id.rate);

    quants[no].setOnFocusChangeListener(this);
    flag[no]=false;


}


@Override
public void onFocusChange(View arg0, boolean arg1) {
    // TODO Auto-generated method stub
    if(flag[no+1]==true){

        if(arg1==false){
            no++;
    LayoutInflater g=getLayoutInflater();

    row[no]=(LinearLayout)g.inflate(R.layout.row, container);
    items[no]=(AutoCompleteTextView)row[no].findViewById(R.id.item);
    quants[no]=(EditText)row[no].findViewById(R.id.quant);
    rates[no]=(EditText)row[no].findViewById(R.id.rate);
    Log.d("detection", "Row is "+ no+ arg0.getId());
        }
    }
}

我创建了一个布尔数组,以了解最后一个editText是否创建了一个新的linearLayout(听取了onFocusChangeListener)。帮助!

1 个答案:

答案 0 :(得分:0)

您需要扩展EditText类,以便创建自己的View类型,其中可能需要一个内部类来实现View.OnFocusChangeListenerpublic方法您可以使用新创建的类型的实例为此内部类的实例设置侦听器。