简体   繁体   中英

Dynamically creating ImageButtons from an ArrayList to a RelativeLayout in Java

I am trying to dynamically create ImageButtons from an ArrayList in Android. I have tried multiple things to get this working, but sometimes there is a mysterious "Button" that is not in the List but appears anyways. I am using a relative layout because the buttons are supposed to be different sizes and different designs based on how many items are in the ArrayList. Any help would be appreciated.

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;

}

So, I think the problem might have been a formatting issue with the switch case? (definitely a rookie mistake) but after slowly debugging through the switch case I have solved the problem. Here is the code for a switch case creating 8 ImageButtons dynamically from an 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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM