2013-05-10 1 views
0

У меня есть несколько значков камеры рядом с несколькими вопросами. Таким образом, если пользователь должен сделать снимок, чтобы документировать ответ, который они могут сделать. Все это происходит внутри фрагмента. У меня есть следующий код:Несколько кнопок изображения для одной цели в фрагменте

public class PostInstallation extends Fragment { 
View view; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    view = inflater.inflate(R.layout.fragment_pre_installation, container, 
      false); 

    ImageButton camera = (ImageButton) view 
      .findViewById(R.id.pre_install_camera);  

    camera.setOnClickListener(new View.OnClickListener() { 


     public void onClick(View v) { 
      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
      startActivity(intent); 
     } 

    });  

    return view; 
} 
} 

Он работает красиво, без проблем. Однако я смущен тем, как мог бы добавить еще 10 из этих ImageButtons. Должен ли я использовать что-то вроде этого?

button1.setOnClickListener(this); 
button2.setOnClickListener(this); 
button3.setOnClickListener(this); 


@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.button1: 
     // do stuff; 
     break; 
     case R.id.button2: 
     // do stuff; 
     break; 
    ... 
} 
} 

и если я имею в виду, что во фрагменте же я на самом деле должен назвать это заявление снова и снова для всех ImageButtons?

button.setOnClickListener((OnClickListener) this.view); 

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

Рабочий код

Это то, что я осела на использовании, я upvote и приветствуем все новые сообщения в этой теме, что получить это сделать с меньшим количеством кода. У меня все меньше кода. Благодаря!

public class PostInstallation extends Fragment { 
View view; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    view = inflater.inflate(R.layout.fragment_post_installation, container, 
      false); 

    ImageButton camera = (ImageButton) view 
      .findViewById(R.id.camera_button); 
    ImageButton camera2 = (ImageButton) view 
      .findViewById(R.id.camera_button2); 
    ImageButton camera3 = (ImageButton) view 
      .findViewById(R.id.camera_button3); 
    ImageButton camera4 = (ImageButton) view 
      .findViewById(R.id.camera_button4); 

    OnClickListener cameraListener = new OnClickListener() {    

     public void onClick(View v) { 
      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
      startActivity(intent); 
     } 

    }; 

    camera.setOnClickListener(cameraListener); 
    camera2.setOnClickListener(cameraListener); 
    camera3.setOnClickListener(cameraListener); 
    camera4.setOnClickListener(cameraListener);  

    return view; 
} 
} 

ответ

1

Создайте только одного слушателя и добавьте его ко всем кнопкам.

OnClickListener cameraListener = new OnClickListener(){ 
    public void onClick(View v){ 
     takePicutre() 
    } 
} 
view.findViewById(R.id.button1).setOnClickListener(cameraListener); 
view.findViewById(R.id.button2).setOnClickListener(cameraListener); 
view.findViewById(R.id.button3).setOnClickListener(cameraListener); 
+0

ха-ха, я знал, что это что-то простое. Не могу поверить, что я об этом не думал. Спасибо, мой друг – IrishWhiskey

+0

Это в основном то же самое, что и ваше собственное решение. – ozbek

+0

@shoe крыса это, но это не так, я искал, главным образом, избежать создания нескольких слушателей кнопки изображения. Объявление каждой кнопки казалось неизбежным без какой-либо петли – IrishWhiskey

1

Дайте одинаковый идентификатор для всех ваших кнопок в вашем макете.

<ImageButton 
     android:id="@+id/pre_install_camera" 
     .... 
     /> 
    <ImageButton 
     android:id="@+id/pre_install_camera" 
     .... 
     /> 
    <ImageButton 
     android:id="@+id/pre_install_camera" 
     .... 
     /> 
    .... 
+0

У меня была такая же мысль (см. Отредактированный пост), я могу использовать это, я могу использовать Саймона, но поскольку он был первым, я принял его ответ. Большое вам спасибо! – IrishWhiskey

+0

Нет проблем, я опубликовал после того, как вы уже приняли ответ @SimonSays :) – ozbek

+0

, чтобы вы знали, что это не работает. Я бы хотел, чтобы это произошло, потому что это спасло бы много печатания. Однако Android только распознает первый экземпляр идентификатора, все остальные кнопки с одинаковым идентификатором не реагируют на метод OnClick – IrishWhiskey