Android 我可以通过一个数组定义多个LinearLayout吗?
我必须将包含3个编辑文本的linearLayout膨胀为另一个linearLayout。我可以使用linearLayout[]数组执行此操作Android 我可以通过一个数组定义多个LinearLayout吗?,android,arrays,android-linearlayout,Android,Arrays,Android Linearlayout,我必须将包含3个编辑文本的linearLayout膨胀为另一个linearLayout。我可以使用linearLayout[]数组执行此操作 public class PurchaseVoucher extends Activity implements OnFocusChangeListener, OnClickListener{ LinearLayout[] row=new LinearLayout[30]; AutoCompleteTextView[] items=new AutoCom
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());
}
公共类PurchaseToucher扩展活动实现OnFocusChangeListener、OnClickListener{
LinearLayout[]行=新的LinearLayout[30];
AutoCompleteTextView[]项=新的AutoCompleteTextView[30];
EditText[]quants=新的EditText[30];
EditText[]费率=新EditText[30];
TextView[]总计=新的TextView[30];
布尔[]标志=新布尔[30];
编辑文本日期;
按钮保存;
线性布局集装箱;
国际贸易编号;
int-id;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.sale\u purchase\u vouch);
否=0;
对于(int i=0;i我认为一个更简单的方法就是创建一个新的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>()
}
@覆盖
public void onFocusChange(视图arg0,布尔值arg1)
{
if(flag[no+1]==true){//不确定是否需要这样做
如果(arg1==false){
否++;
LinearLayout ll=新的LinearLayout(PurchaseVoucher.this);
for(int i=0;i
我没有测试过这个,所以可能需要调整,但对我来说,这会更容易管理。我创建了一个ArrayList
来保存LinearLayout
s,但是你可以为EditText
s或任何你需要的东西做它。我认为一个更简单的方法就是创建一个新的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>()
}
@覆盖
public void onFocusChange(视图arg0,布尔值arg1)
{
if(flag[no+1]==true){//不确定是否需要这样做
如果(arg1==false){
否++;
LinearLayout ll=新的LinearLayout(PurchaseVoucher.this);
for(int i=0;i
我还没有测试过这个,所以可能需要调整,但对我来说这会更容易管理。我创建了一个ArrayList
来保存LinearLayout
s,但是你可以为EditText
s或任何你需要的东西执行它。@codeMagic,不,No
be0
int
s自动实例化为0。如果是这样的话键入Integer
,然后它将是null
。我提取了一些不必要的代码以使其看起来干净。但是我已经处理了“否”。它会在需要时自动递增。但是当我需要从EditText获取值时,问题会出现。这就是我问这个问题的原因。我认为我的ap中存在一些问题proach我现在可以编辑我的问题来问真正的问题吗problem@kayveesin是的,因为这可以工作,但如果不行,那么我们可以告诉你为什么,除非我们知道实际的问题。很难知道你想做什么。你能更详细地解释一下你的最终目标是什么吗?我没有看到任何其他使用此模型的代码,所以我猜是best答案将包括一种不同的方式来实现您的最终目标。@codeMagic,No,No
be0
int
s自动实例化为0。如果它是typeInteger
,那么它将是null
。我提取了一些不必要的代码以使它看起来更干净。但我已经处理了“No”。它会自动递增ver必选。当我需要从EditText中获取值时,问题会出现。这就是我问这个问题的原因。我认为我的方法中存在一些问题。我现在可以编辑我的问题来问真实的问题吗problem@kayveesin是的,因为这是可行的,但如果不行,那么我们可以告诉你原因,除非我们知道实际的问题是真的很难说你想做什么。你能更详细地解释一下你的最终目标是什么吗?我还没有看到任何其他使用此模型的代码,所以我想最好的答案应该包括实现最终目标的不同方法。