2013-05-12 3 views
0

Внутри моей деятельности Я начинаю простой диалог.android | multiple onclicklistener в диалоговом окне

final Dialog myDialog = new Dialog(this); 
myDialog.setContentView(R.layout.testing); 
... 

Мой testing.xml Макет состоит из ничего, кроме 10 ImageViews, id`s являются '1' до '10'.

Я хочу, чтобы каждый ImageView был доступен для клики и что-то делать. Определить метод onclick() в файле .xml не работает, так как метод не может быть найден при просмотре диалога.

Единственный способ, которым я получил его работы заключается в следующем: определить 10 OnClick-слушателей:

ImageView img_1 = (ImageView) myDialog.findViewById(R.id.1); 
ImageView img_2 = (ImageView) myDialog.findViewById(R.id.2); 
... 

img_1.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View view) { 
    execute_funtion(1); 
    myDialog.cancel(); 
} 
}); 

img_2.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View view) { 
    execute_funtion(2); 
    myDialog.cancel(); 
} 
}); 

... 

Однако, это действительно плохой код, у меня есть 10 раз почти одни и те же линии.

Итак, мой вопрос: как я могу сделать эту работу с чистым кодом? Я подумал о множественном onclicklistener (переопределите функцию onClick() и сделаю переключатель/случай в функциях или что-то в этом роде), но он не работает.

Я рад каждой идее! Благодаря

/EDIT

Вот фрагмент из файла .xml

<ImageView 
    android:id="@+id/1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="2dp" 
    android:onClick="myFunction" 
    android:src="@drawable/ic_launcher" /> 
+0

, что вы имеете в виду ** определить OnClick() Methode в .xml **. опубликуйте этот .xml файл, также – CRUSADER

+0

Я добавил его, спасибо, что привлек внимание! При нажатии на изображение «myFunction()» не может быть найдено. – user1885484

+0

Используйте корпус переключателя, как вы уже упоминали 'переписываете функцию onClick() и делаете переключатель/регистр в функциях или что-то в этом роде'. Но сначала переименуйте свои идентификаторы. Нельзя использовать числовой идентификатор, вместо этого используйте img1, img2. – andrew

ответ

3

Сделайте свою активность реализации OnClickListener, а затем обработать onClick событие, как показано ниже:

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.img1: 
     ... 
     break; 
    case R.id.img2: 
     ... 
     break; 
    } 
} 
+0

На самом деле вы не можете определить id как номер. – andrew

+0

Вы правы!Я отредактирую свой ответ. – Bolton

0
  1. Вы должны позволить ваш Activity/Fragment реализовать OnClickListener.
  2. Когда вы это сделаете, вам придется переопределить метод onClick в этом конкретном действии/фрагменте.
  3. Установите onClickListener сек на изображение следующим образом:

    img_1.setOnClickListener(YourActivity.this); 
    
  4. Тогда в этом onClick методе вы можете поставить кожух переключателя или если еще, если дело следующим образом

    @Override 
    public void onClick(View v) 
    { 
        if(v==img_1) { 
          //do this 
        } else if(v==img_2) { 
         //do that 
        }... 
    } 
    

    или

    @Override 
    public void onClick(View v) 
    { 
        switch (v.getId()) { 
         case img_1.getId(): // do this 
          break; 
         case img_2.getId(): // do that 
          break; 
         . 
         . 
         . 
         default : break; 
        } 
    } 
    
+0

Извините, первый фрагмент кода по какой-то причине не форматируется! – Antrromet

+0

"case img_1.getId():" не работает, но работает, когда я пишу "case R.id.1" спасибо! – user1885484

Смежные вопросы