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

它工作得很好,没有问题。但是,我对如何ImageButtons有效地添加 10 个以上的内容感到困惑。我必须使用这样的东西吗?

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

2 回答 2

1

只创建一个 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);
于 2013-05-10T00:43:38.410 回答
1

为布局中的所有按钮提供相同的 ID。

    <ImageButton
        android:id="@+id/pre_install_camera"
        ....
        />
    <ImageButton
        android:id="@+id/pre_install_camera"
        ....
        />
    <ImageButton
        android:id="@+id/pre_install_camera"
        ....
        />
    ....
于 2013-05-10T00:45:53.193 回答