Сделайте случайно сгенерированные кнопки ImageButtons кликабельными - PullRequest
1 голос
/ 04 апреля 2011

У меня проблемы с тем, чтобы мое случайно сгенерированное изображение, которое интерпретируется как кнопка, стало кликабельным.Каждый из них ведет к разной активности.

Случайные изображения на самом деле работают идеально, единственная проблема, с которой он не кликабелен.

Вот мой Main.java:

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final List<String> images = new ArrayList<String>();
        for (int i=1; i<=13; i++) {
            images.add("img"+i);
        }
        final Button imgView = (Button)findViewById(R.id.top1);
        String imgName = null;
        int id = 0;

        Collections.shuffle(images, new Random());
        imgName = images.remove(0);
        imageRandomizer(imgName, id, imgView);
   }

    public void imageRandomizer(String imgName, int id, final Button imgView) {
        id = getResources().getIdentifier(imgName, 
                                          "drawable",
                                          getPackageName());  
        imgView.setBackgroundResource(id);
    }

}

На моеммакет, я указал идентификатор top1 как Button.Таким образом, приведенный выше код будет искать мои нарисованные изображения, которые имеют имена img1.jpg , img2.jpg , img3.jpg , до img13.jpg .

Сделать ImageButton интерактивным для одного занятия, не завися от показанного случайного изображения, легко, я могу сделать это без проблем.Но то, что я хочу сделать, выглядит примерно так: когда генерируется img1.jpg , он становится кликабельным и приводит к Activity1.java , для img2.jpg намеренияидет к Activity2.java и т. д.

EDIT @Roflcoptr Вот мой OnClickListener:

private OnClickListener top_listener = new OnClickListener() {
        public void onClick(View v) {
             switch((Integer) v.getTag()) {

             case 1: 
             Intent aid = new Intent(Main.this, ProjektAID.class);
             startActivity(aid);

             case 2:
             Intent adh = new Intent(Main.this, ProjektADH.class);
             startActivity(adh);

             case 3:
                 Intent bos = new Intent(Main.this, ProjektBOS.class);
                 startActivity(bos);

             case 4:
                 Intent brot = new Intent(Main.this, ProjektBROT.class);
                 startActivity(brot);

             case 5:
                 Intent care = new Intent(Main.this, ProjektCARE.class);
                 startActivity(care);

             case 6:
                 Intent caritas = new Intent(Main.this, ProjektCARITAS.class);
                 startActivity(caritas);

             case 7:
                 Intent doc = new Intent(Main.this, ProjektDOC.class);
                 startActivity(doc);

             case 8:
                 Intent drk = new Intent(Main.this, ProjektDRK.class);
                 startActivity(drk);

             case 9:
                 Intent give = new Intent(Main.this, ProjektGIVE.class);
                 startActivity(give);

             case 10:
                 Intent hive = new Intent(Main.this, ProjektHIV.class);
                 startActivity(hive);

             case 11:
                 Intent jo = new Intent(Main.this, ProjektJOHANNITER.class);
                 startActivity(jo);

             case 12:
                 Intent kind = new Intent(Main.this, ProjektKINDERHERZ.class);
                 startActivity(kind);

             case 13:
                 Intent kult = new Intent(Main.this, ProjektKULTURGUT.class);
                 startActivity(kult);
             }
        }
       };

и вот метод рандомизатора:

 public void imageRandomizer(String imgName, int id, final Button imgView) {
    id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
    imgView.setBackgroundResource(id);
    imgView.setTag(new Integer(1)); //example for image 1
    if (imgName.equals("img1")) {
        imgView.setTag(new Integer(1)); //example for image 1
     } else if (imgName.equals("img2")) {
        imgView.setTag(new Integer(2));
     } else if (imgName.equals("img3")) {
         imgView.setTag(new Integer(3));
     } else if (imgName.equals("img4")) {
         imgView.setTag(new Integer(4));
     } else if (imgName.equals("img5")) {
         imgView.setTag(new Integer(5));
     } else if (imgName.equals("img6")) {
         imgView.setTag(new Integer(6));
     } else if (imgName.equals("img7")) {
         imgView.setTag(new Integer(7));
     } else if (imgName.equals("img8")) {
         imgView.setTag(new Integer(8));
     } else if (imgName.equals("img9")) {
         imgView.setTag(new Integer(9));
     } else if (imgName.equals("img10")) {
         imgView.setTag(new Integer(10));
     } else if (imgName.equals("img11")) {
         imgView.setTag(new Integer(11));
     } else if (imgName.equals("img12")) {
         imgView.setTag(new Integer(12));
     }
    else if (imgName.equals("img13")) {
        imgView.setTag(new Integer(13));
    }
}

1 Ответ

1 голос
/ 04 апреля 2011

Я бы использовал тег для идентификации кнопки.Поэтому в вашем imateRandomizer добавьте уникальный идентификатор для каждого возможного изображения.Я не знаю, как можно однозначно идентифицировать изображения, но я покажу пример для имени:

public void imageRandomizer(String imgName, int id, final Button imgView)
    {
        id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
        imgView.setBackgroundResource(id);

        if (imgName.equals("Name of the Image for your first activity") {
           imgView.setTag(new Integer(1)); //example for image 1
        } else if (imgName.equals("Name of the Image for your second activity") {
           imgView.setTag(new Integer(2));
        }
    }

А затем в вашем ClickListener вы можете проверить, какой тег у кнопки:

imgView.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 switch((Integer) v.getTag()) {

                      case 1: //start Activity 1;

                      break;

                      case 2: //start Activity 2;

                      break;
                 }
             }
         });
...