У меня есть RelativeLayout
и ImageView
.
Схема приводится ниже -
Событие Click для родительского и детского просмотра
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rlMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black" >
<ImageView
android:id="@+id/ivIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher" />
</RelativeLayout>
The Activity
код -
public class MainActivity extends Activity implements OnClickListener{
private RelativeLayout rlMain;
private ImageView ivIcon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rlMain = (RelativeLayout) findViewById(R.id.rlMain);
ivIcon = (ImageView) findViewById(R.id.ivIcon);
rlMain.setOnClickListener(this);
ivIcon.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rlMain:
Toast.makeText(this, "Relative Layout clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.ivIcon:
Toast.makeText(this, "Image View clicked", Toast.LENGTH_SHORT).show();
break;
}
}
}
Я применяется на клик слушателя для обоих RelativeLayout
(родителя) и ImageView
(ребенка).
При щелчке по относительной компоновке - обрабатывается обработчиком обратного расположения. (Это кажется правильным).
При нажатии на Imagview - обрабатывается изображение. (Вот путаница).
Должен ли щелчок по представлению изображения обрабатываться как родительским (относительный макет), так и дочерним (изображение)? Какова логика, если обрабатывается только дочерний вид?
Параметр '' RelativeLayout' в onClick' у слушателя будет называться даже если вы нажмете на изображение. –
Почему бы не удалить '.setOnClickListener' из метода' OnCreate() '(для' ImageView' и 'RelativeLayout'). Вместо этого поставьте 'android: onClick =" onClickFunction' на обоих макетах и переименуйте 'onClick()' в 'onClickFunction()' (также необходимо удалить анонс @Override). Это будет работать точно! – g00dy
@ micro.pravi: Нет, он не вызван. Вызывается только обработчик щелчка изображения. – Anukool