我有一段代码可以为多个OnClickListener
对象设置TextView
。但是,当我单击其中一个时,它会执行与列表中位于其下方的所有其他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();
请注意,我目前只实现了其中三个。如果我为TextView
选择gallery
,则会触发其相关操作。但是,如果我选择camera
,它会启动自身和图库的操作。如果我选择ringer
,它将改变铃声状态,启动相机和画廊。
我猜这与我为所有这些对象设置相同的OnClickListener这一事实有关,但是我真的必须这样做:
ringer.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
setRingerState(true);
}
});
每个人?看起来很难看。我还有其他选择,还是我错过了什么?
感谢您的帮助。
答案 0 :(得分:4)
每个案例都需要打破:
case R.id.ringer:
setRingerState(true);
break;
case R.id.camera:
intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(intent);
finish();
break;
// etc
否则执行就会失败并且所有函数都会运行。