2013-09-17 2 views
1

Я пытаюсь динамически создавать ImageButtons из ArrayList в Android. Я попробовал несколько вещей, чтобы заставить это работать, но иногда появляется таинственная «кнопка», которая отсутствует в списке, но появляется в любом случае. Я использую относительный макет, потому что кнопки должны быть разных размеров и разных дизайнов, исходя из количества элементов в ArrayList. Любая помощь будет оценена по достоинству.Динамическое создание ImageButtons из ArrayList в RelativeLayout в Java

public void handlers() //throws Exception 
{ 
    ArrayList<WarehouseProductItemExt> coffeeItemList = globals.GetCoffeeItems(); 
    for(final WarehouseProductItemExt wpi : coffeeItemList) 
    { 
     count ++; 
     butt = new Button(this); 
    butt.setBackgroundDrawable(Coffee); 
     butt.setId(count); 
     RelativeLayout.LayoutParams params = getLayout(count, coffeeItemList.size()); 
     butt.setLayoutParams(params); 
     butt.setText(wpi.name); 
     layout.addView(butt); 

     butt.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 


       //Handler handler = new Handler(); 
       //handler.postDelayed(new Runnable() { 

       //public void run() 
       //{ 
        //butt.setBackgroundDrawable(Coffee); 
      // } 
       //}, 100); // 100ms delay 
       double price = 0.0; 
       for(WarehouseProductItemPricing wpip : wpi.prices) 
       { 
        if(wpip.idPriceLevelType == 1) 
        { 
         price = wpip.price; 

        } 
       } 
       Boolean itemExistsInList = false; 
       for(TableItems ti : tableItems) 
       { 
        if(ti.getIdWarehouseProductItem() == wpi.idWarehouseProductItem) 
        { 
         itemExistsInList = true; 
         Globals globals = Globals.getInstance(); 
         globals.addItemToCart(wpi); 
         ti.setQuantity(ti.getQuantity() + 1); 
        } 
       } 
       if(!itemExistsInList) 
       { 
        TableItems n = new TableItems(wpi.name, 1, price, wpi.idWarehouseProductItem); 
        Globals globals = Globals.getInstance(); 
        globals.addItemToCart(wpi); 
        tableItems.add(n); 
       } 
      //butt.setBackgroundDrawable(selectButt); 
      Intent na = new Intent(".ShoppingCartActivity"); 
      startActivity(na); 
      finish(); 
      } 
     }); 
    } 


private android.widget.RelativeLayout.LayoutParams getLayout(int count, int size) 
{ 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(200, 360); 
    switch(size) 
      { 
    case 1: 
     params = new RelativeLayout.LayoutParams(200, 360); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.CENTER_IN_PARENT); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 2: 
     params = new RelativeLayout.LayoutParams(200, 360); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.CENTER_VERTICAL); 
      params.setMargins(200, 0, 200, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.RIGHT_OF, 1); 
      params.addRule(RelativeLayout.CENTER_VERTICAL); 
      params.setMargins(200, 0, 200, 0); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 3: 
     params = new RelativeLayout.LayoutParams(200, 360); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.setMargins(200, 0, 0, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.CENTER_IN_PARENT); 
      params.setMargins(0, 0, 0, 0); 
      break; 
     case 3: 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.setMargins(0, 0, 200, 0); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 4: 
     params = new RelativeLayout.LayoutParams(200, 360); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.setMargins(50, 250, 0, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.addRule(RelativeLayout.RIGHT_OF, 1); 
      params.setMargins(100, 0, 100, 250); 
      break; 
     case 3: 
      params.addRule(RelativeLayout.RIGHT_OF, 2); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.setMargins(0, 250, 100, 0); 
      break; 
     case 4: 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.addRule(RelativeLayout.RIGHT_OF, 3); 
      params.setMargins(0, 0, 50, 250); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 5: 
     params = new RelativeLayout.LayoutParams(170, 306); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.setMargins(50, 0, 0, 50); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.addRule(RelativeLayout.RIGHT_OF, 1); 
      params.setMargins(50, 50, 0, 0); 
      break; 
     case 3: 
      params.addRule(RelativeLayout.RIGHT_OF, 2); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.setMargins(50, 0, 0, 50); 
      break; 
     case 4: 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.addRule(RelativeLayout.RIGHT_OF, 3); 
      params.setMargins(50, 50, 0, 0); 
      break; 
     case 5: 
      params.addRule(RelativeLayout.RIGHT_OF, 4); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.setMargins(50, 0, 0, 50); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 6: 
     params = new RelativeLayout.LayoutParams(200, 360); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.CENTER_IN_PARENT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.setMargins(0, 0, 0, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.BELOW, 1); 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.setMargins(0, 0, 0, 0); 
      break; 
     case 3: 
      params.addRule(RelativeLayout.RIGHT_OF, 2); 
      params.addRule(RelativeLayout.BELOW, 1); 
      params.setMargins(100, 0, 100, 0); 
      break; 
     case 4: 
      params.addRule(RelativeLayout.BELOW, 1); 
      params.addRule(RelativeLayout.CENTER_HORIZONTAL); 
      params.setMargins(0, 0, 0, 0); 
      break; 
     case 5: 
      params.addRule(RelativeLayout.BELOW, 1); 
      params.addRule(RelativeLayout.RIGHT_OF, 4); 
      params.setMargins(100, 0, 100, 0); 
      break; 
     case 6: 
      params.addRule(RelativeLayout.BELOW, 1); 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      params.setMargins(0, 0, 0, 0); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 7: 
     params = new RelativeLayout.LayoutParams(125, 225); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.setMargins(50, 0, 0, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.RIGHT_OF, 1); 
      params.addRule(RelativeLayout.ABOVE, 1); 
      params.setMargins(50, 0, 0, 0); 
      break; 
     case 3: 
      params.addRule(RelativeLayout.RIGHT_OF, 2); 
      params.addRule(RelativeLayout.ABOVE, 2); 
      params.setMargins(50, 0, 0, 0); 
      break; 
     case 4: 
      params.addRule(RelativeLayout.CENTER_IN_PARENT); 
      params.setMargins(0, 0, 0, 0); 
      break; 
     case 5: 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      params.setMargins(0, 0, 50, 0); 
      break; 
     case 6: 
      params.addRule(RelativeLayout.BELOW, 7); 
      params.addRule(RelativeLayout.LEFT_OF, 7); 
      params.setMargins(0, 0, 50, 0); 
      break; 
     case 7: 
      params.addRule(RelativeLayout.BELOW, 6); 
      params.addRule(RelativeLayout.LEFT_OF, 6); 
      params.setMargins(0, 0, 50, 0); 
      break; 
     default: 
      break; 
     } 
     break; 
    case 8: 
     params = new RelativeLayout.LayoutParams(180, 144); 
     switch(count){ 
     case 1: 
      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(200, 50, 20, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.RIGHT_OF, 1); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(20, 50, 20, 0); 
      break; 
     case 3: 
      params.addRule(RelativeLayout.RIGHT_OF, 2); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.width = 180; 
      params.height = 324;; 
      params.setMargins(20, 50, 20, 0); 
      break; 
     case 4: 
      params.addRule(RelativeLayout.RIGHT_OF, 3); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.width = 180; 
      params.height = 324; 

      params.setMargins(20, 50, 20, 0); 
     case 5: 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(20, 0, 100, 0); 
      break; 
     case 6: 
      params.addRule(RelativeLayout.LEFT_OF, 5); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(20, 0, 20, 0); 
      break; 
     case 7: 
      params.addRule(RelativeLayout.LEFT_OF, 6); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(20, 0, 20, 0); 
      break; 
     case 8: 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.addRule(RelativeLayout.LEFT_OF, 7); 
      params.setMargins(0, 0, 20, 0); 
      break; 
     default: 
      break; 
     } 
     break; 
    default: 
     break; 
    } 
return params; 

}

ответ

0

Так что, я думаю, что проблема может быть проблема форматирования с корпусом выключателя? (определенно ошибка новобранец), но после медленной отладки через коммутатор я решил проблему. Вот код для случая коммутатора, который динамически создает 8 ImageButtons из списка arrayList.

case 8: 
     params = new RelativeLayout.LayoutParams(180, 144); 
     switch(count){ 
     case 1: 

      params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(300, 40, 30, 0); 
      break; 
     case 2: 
      params.addRule(RelativeLayout.RIGHT_OF, 1); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(20, 40, 30, 0); 
      break; 
     case 3: 
      params.width = 180; 
      params.height = 324; 
      params.addRule(RelativeLayout.RIGHT_OF, 2); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.setMargins(0, 40, 30, 0); 
      break; 
     case 4: 
      params.width = 180; 
      params.height = 324; 
      params.addRule(RelativeLayout.RIGHT_OF, 3); 
      params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      params.setMargins(0, 40, 30, 0); 
      break; 
     case 5: 
      params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(40, 0, 300, 0); 
      break; 
     case 6: 
      params.addRule(RelativeLayout.LEFT_OF, 5); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.height = 324; 
      params.width = 180; 
      params.setMargins(40, 0, 0, 0); 
      break; 
     case 7: 
      params.addRule(RelativeLayout.LEFT_OF, 6); 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.setMargins(40, 0, 0, 0); 
      break; 
     case 8: 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      params.width = 180; 
      params.height = 324; 
      params.addRule(RelativeLayout.LEFT_OF, 7); 
      break; 
     default: 
      break; 
     } 
     break; 
    default: 
     break; 
Смежные вопросы