Android 多个setOnClickListener()调用会导致意外行为

Android 多个setOnClickListener()调用会导致意外行为,android,Android,我有一段代码可以为几个TextView对象设置OnClickListener。但是,当我单击其中一个对象时,它会执行与列表中显示在它下面的所有其他TextView对象关联的所有操作。代码: TextView wake = (TextView) findViewById(R.id.wake); TextView ringer = (TextView) findViewById(R.id.ringer); TextView nap = (TextView) findViewB

我有一段代码可以为几个
TextView
对象设置
OnClickListener
。但是,当我单击其中一个对象时,它会执行与列表中显示在它下面的所有其他
TextView
对象关联的所有操作。代码:

    TextView wake = (TextView) findViewById(R.id.wake);
    TextView ringer = (TextView) findViewById(R.id.ringer);
    TextView nap = (TextView) findViewById(R.id.nap);
    TextView camera = (TextView) findViewById(R.id.camera);
    TextView volumes = (TextView) findViewById(R.id.volumes);
    TextView gallery = (TextView) findViewById(R.id.gallery);

    wake.setOnClickListener(this);
    ringer.setOnClickListener(this);
    nap.setOnClickListener(this);
    camera.setOnClickListener(this);
    volumes.setOnClickListener(this);
    gallery.setOnClickListener(this);
到目前为止,我在onClick方法中有以下
Switch-Case
语句:

@Override
public void onClick(View v) {
    Intent intent;

    switch (v.getId()) {

    case R.id.wake:

    case R.id.ringer:
        setRingerState(true);

    case R.id.nap:

    case R.id.camera:
        intent = new Intent("android.media.action.IMAGE_CAPTURE");
        startActivity(intent);
        this.finish();

    case R.id.volumes:


    case R.id.gallery:
        intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivity(intent);
        this.finish();
请注意,我目前只实现了其中三个。发生的情况是,如果我为
选择
文本视图
,它将只触发其关联的操作。但是,如果我选择了
camera
,它会同时启动自身和gallery的操作。如果我选择
振铃器
,它将更改振铃器状态,启动相机和多媒体资料

我猜这与我为所有这些对象设置相同的OnClickListener有关,但我真的必须这样做吗:

    ringer.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            setRingerState(true);

        }   
    });
每一个?看起来很难看。我还有其他选择吗?还是我遗漏了什么


谢谢您的帮助。

您需要在每个案例之后中断:

case R.id.ringer:
  setRingerState(true);
  break;
case R.id.camera:
  intent = new Intent("android.media.action.IMAGE_CAPTURE");
  startActivity(intent);
  finish();
  break;
// etc

否则执行就会失败,所有函数都会运行。

在每种情况下都需要中断:

case R.id.ringer:
  setRingerState(true);
  break;
case R.id.camera:
  intent = new Intent("android.media.action.IMAGE_CAPTURE");
  startActivity(intent);
  finish();
  break;
// etc

否则执行就会失败,所有函数都会运行。

是的,我在您做出响应之前得出了这个结论。谢谢,真是个愚蠢的错误。是的,我在你回答之前就得出了这个结论。谢谢,真是个愚蠢的错误。