2013-08-16 79 views
0

我必須將包含3個editTexts的linearLayout充氣到另一個linearLayout。我可以使用linearLayout []數組來做到這一點。我可以通過數組定義多個LinearLayout嗎?

public class PurchaseVoucher extends Activity implements OnFocusChangeListener, OnClickListener{ 

LinearLayout[] row=new LinearLayout[30]; 
AutoCompleteTextView[] items=new AutoCompleteTextView[30]; 
EditText[] quants=new EditText[30]; 
EditText[] rates=new EditText[30]; 
TextView[] totals=new TextView[30]; 
Boolean[] flag=new Boolean[30]; 
EditText date; 
Button save; 
LinearLayout container; 
int no; 
int id; 


@Override 
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); 
    save.setOnClickListener(this); 
    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()); 
     } 
    } 
} 


@Override 
public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    Log.d("quant", quants[0].getText().toString()+" "+quants[0].getText().toString()); 
    Log.d("item", items[1].getText().toString()+" "+quants[1].getText().toString()); 
    Log.d("rate", rates[2].getText().toString()+" "+quants[2].getText().toString()); 

} 

}

在按下該按鈕以獲得在logcat的結果,所有的值都等於第一3個editTexts即等於項[0],寬客[0]和率[ 0]。其次,onFocusChangeListener()僅適用於預定義的第一個linearLayout中的editText。

+0

@codeMagic,不,'不'爲'0'。 'int'被自動實例化爲0.如果它是'Integer'類型,那麼它將是'null'。 – Phil

+0

我拿出了一些不必要的代碼,使它看起來很乾淨。但我照顧'不'。它會在需要時自動增加。當我需要從editTexts獲取值時,問題出現了。這就是我問這個問題的原因。我認爲我的方法有一些問題 – kayveesin

+0

我現在應該編輯我的問題來問現實問題 – kayveesin

回答

1

我想更簡單的方法做你試圖將只是創建一個新的LinearLayout和你需要每次EditText S中的量是什麼。然後,您也可以在這個時候將這些值添加到數組中。通過這種方式,您可以擁有無​​限量的行,並且我認爲它可以讓您的代碼更清晰。也許類似

@Override 
public void onFocusChange(View arg0, boolean arg1) 
{ 
    if(flag[no+1]==true){ // not sure if this is needed 

    if(arg1==false){ 
     no++; 
     LinearLayout ll = new LinearLayout(PurchaseVoucher.this); 
     for (int i= 0; i < noOfEditTextNeeded; i++) 
     { 
      EditText et = new EditText(PurchaseVoucher.this); 
      ll.addView(et); 
     } 
     container.addView(ll); 
     llArray.add(ll); // create a member variable ArrayList-- ArrayList<LinearLayout> = new ArrayList<LinearLayout>() 
} 

我還沒有測試過,所以可能需要調整,但對我來說這將更容易管理。我創建了一個ArrayList來保存LinearLayout,但您可以爲EditText或其他任何您需要的操作。

相關問題