用于片段中的多个ImageButtons用于一个目的

问题描述:

我在多个问题旁边有许多相机图标。这样,如果用户必须拍摄照片来记录他们可以回答的问题。这一切都发生在一个片段内。我有以下代码用于片段中的多个ImageButtons用于一个目的

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); 

我之所以这样问是因为switch语句似乎是多余的看到所有这些按钮怎么办同样的事情。他们都只是打电话给相机。我很积极,其他人也遇到了这个问题,并找到了更高效/优雅的解决方案。提前致谢!

工作守则

这是我最后安定在使用,我会给予好评和欢迎,在这个线程的所有新职位,得到这个用更少的代码来完成。我所有的代码都较少。谢谢!

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; 
} 
} 

只创建一个Listener并将其添加到所有按钮。

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 2013-05-10 00:45:48

+0

这与你自己的解决方案基本相同。 – ozbek 2013-05-10 00:47:14

+0

@shoe老鼠它是但它没有,我期待主要避免做多个图像按钮监听。声明每个按钮似乎是不可避免的没有某种循环 – IrishWhiskey 2013-05-10 01:05:41

给您的所有按钮的相同ID在你的布局。

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

我刚刚有同样的想法(请参阅编辑后),我可以使用这个,我可以使用西蒙的,但他是第一次,我接受了他的答案。尽管非常感谢! – IrishWhiskey 2013-05-10 00:46:55

+0

没问题,我发布后,你已经接受@SimonSays回答:) – ozbek 2013-05-10 00:50:02

+0

只是让你知道这是行不通的。我希望这样做,因为它会节省很多打字。但是,Android只识别ID的第一个实例,所有其他具有相同ID的按钮都不会对OnClick方法做出反应 – IrishWhiskey 2013-05-10 01:21:49