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

リスナーを 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);
于 2013-05-10T00:43:38.410 に答える