Android – тот же OnClickListener для TextView и ImageView

У меня есть список из 3-х предметов:

[image_1] [text_1] [image_2] [text_2] [image_3] [text_3] 

Введите описание изображения здесь

Я не использую ListView. Вместо этого я использовал RelativeLayout.

Как я могу обработать OnClickListener как для TextView, так и для ImageView?

list_layout.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/image_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="21dp" android:layout_marginTop="21dp" android:src="@drawable/calbutton" /> <TextView android:id="@+id/text_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/image_1" android:layout_toRightOf="@+id/image_1" android:text="TextView" /> <ImageView android:id="@+id/image_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBelow="@+id/image_1" android:layout_below="@+id/image_1" android:layout_marginLeft="21dp" android:layout_marginTop="21dp" android:src="@drawable/calbutton" /> <TextView android:id="@+id/text_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/text_1" android:layout_alignTop="@+id/image_2" android:text="TextView" /> <ImageView android:id="@+id/image_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBelow="@+id/image_2" android:layout_below="@+id/image_2" android:layout_marginLeft="21dp" android:layout_marginTop="21dp" android:src="@drawable/calbutton" /> <TextView android:id="@+id/text_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/image_3" android:layout_toRightOf="@+id/image_3" android:text="TextView" /> </RelativeLayout> 

Вы можете добавить одно родительское представление как для представления, так и для вызова клика для этого родительского представления, например, вы можете добавить LinearLayout в качестве родителя:

 <LinearLayout android:id="@+id/firstparent"> <Imageview/> <TextView/> </LinearLayout> <LinearLayout android:id="@+id/secondparent"> <Imageview/> <TextView/> </LinearLayout> <LinearLayout android:id="@+id/thirdparent"> <Imageview/> <TextView/> </LinearLayout> <LinearLayout android:id="@+id/forthparent"> <Imageview/> <TextView/> </LinearLayout> 

Теперь установите прослушиватель LinearLayout на LinearLayout чтобы вы могли получить одно и то же событие, если вы щелкните изображение или текстовое изображение.

Затем зарегистрируйте onClickListner для каждого макета.

 layout1.setOnClickListener(this); layout2.setOnClickListener(this); layout3.setOnClickListener(this); layout4.setOnClickListener(this); @Override public void onClick ( View v ) { if ( v == layout1 ) { // your code... } else if(v == layout2){ // your code... } //// add others... } 

Поместите imageview и textview в linear layout . Затем переопределить onClickLListener для LinearLayout

 <RelativeLayout ...... > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:id="@+id/image_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="21dp" android:layout_marginTop="21dp" android:src="@drawable/calbutton" /> <TextView android:id="@+id/text_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/image_1" android:layout_toRightOf="@+id/image_1" android:text="TextView" /> </LinearLyaout> ....... </RelativeLayout> 

Для ListView вы можете добавить onItemClickListener который будет вызываться для щелчка в любом месте строки.

Просто реализует OnClickListener() для вашего java-файла, такого как beflow,

 public yourClassName extends Activity implements OnClickListener { ....your code // register for onClickListener text1.setOnClickListener(this); // register same for other textboxes & imageview. @Override public void onClick ( View view ) { if ( view == text1 ) // assuming text1 is your text_1 of your .xml file { // do stuff } ... // same for other textboxes & image view. } } 

Просто используйте OnClickListeners для всех текстовых просмотров и изображений, подобных этому

 findViewById(R.id.image_1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ////// write your code here } }); 

Если вам нужен один обработчик с разными действиями для каждого вида, вы можете сделать это:

 TextView tv; ImageView iv; View.OnClickListener myOnlyhandler = new View.OnClickListener() { public void onClick(View v) { if( tv.getId() == ((TextView)v).getId() ){ // it was the textview } else if(iv.getId() == ((ImageView)v).getId() ){ // it was the imageview } } } 

Если вы хотите сгруппировать оба представления вместе, поместите их в контейнер (например, RelativeLayout, LinearLayout и т. Д.) И назначьте OnClickListener контейнеру.

Это код

 TextView tv[] = new TextView[subCategory.length]; for (int i = 0; i < subCategory.length; i++) { tv[i] = new TextView(this); tv[i].setText(subCategory[i]); tv[i].setId(i); sCategoryLayout.addView(tv[i]); tv[i].setOnClickListener(onclicklistener); } 

Метод onclicklistener:

 OnClickListener onclicklistener = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(v == tv[0]){ //do whatever you want.... } } }; 

Вы можете либо установить событие onClick, как показано ниже как для изображения / кнопки / textview / edittext и т. Д., И использовать этот метод в своей деятельности.

Введите описание изображения здесь

 <Button android:id="@+id/some_ui_element" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00FFFFFF" android:onClick="onClickButton" android:shadowColor="#000" android:text="@string/sometitle" android:textColor="@android:color/primary_text_dark_nodisable" /> /** * onClickView() called * @param v */ public void onClickView(View v) { //Do something switch(v.getId()){ case R.id.someuielement : break; ... ... } } 
Intereting Posts
Как потреблять и отклонять всплывающее окно при нажатии на него? Импорт файла ant build.xml в Eclipse Как отобразить количество уведомлений в значке панели инструментов в android Intent не открывается в следующем коде Макет как паук Внедрение недавно разработанных руководств по дизайну Android и UI для версий 2.x Выраженное лямбда-выражение Джека не использует более эффективный подход, когда значение minSdkVersion установлено равным 24 Android ImageReader.acquireLatestImage возвращает недопустимый JPG Как установить флаг отладки для хром? Java.lang.AbstractMethodError, когда шпион LinkedList в Android Как реализовать пользовательский интерфейс, аналогичный пользовательскому интерфейсу Lollipop? Ошибка: выполнение выполнено для задачи ': ProjectName: mergeDebugResources'. > Crunching Cruncher * некоторые файлы * сбой, см. Журналы Могу ли я передать объект Javascript в Android WebView? Пользовательский агент Android HTTP Обратный звонок от адаптера