12

Я использовал пользовательский ListView, и я показываю некоторые данные, используя тот же ListView.

Когда я нажимаю на элемент списка, onClickListener не получает вызов. Я не могу выбрать элемент списка.OnItemClickListener и OnClickListener не работают для ListView

Компоновка Код: Код

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_alignParentLeft="true" 
android:layout_marginBottom="16dp" 
android:background="@drawable/list_selector" 
android:clickable="true" 
android:orientation="horizontal" 
android:padding="5dip" > 

<LinearLayout 
    android:id="@+id/imgProperty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginRight="5dip" 
    android:padding="3dip" > 

    <ImageView 
     android:id="@+id/list_image" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:contentDescription="@string/app_name" 
     android:src="@drawable/ic_launcher" 
     android:focusable="false"/> 
</LinearLayout> 

<TextView 
    android:id="@+id/tvCity" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="75dip" 
    android:layout_toRightOf="@+id/list_image" 
    android:paddingBottom="10dip" 
    android:text="property" 
    android:textColor="#040404" 
    android:textSize="15sp" 
    android:textStyle="bold" 
    android:typeface="sans" /> 

<TextView 
    android:id="@+id/tvprice" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/imgProperty" 
    android:layout_alignLeft="@+id/tvCity" 
    android:text="Price" 
    android:focusable="false"/> 

</RelativeLayout> 

адаптер:

public class CustomListAdapter extends BaseAdapter { 

ArrayList<Propety> PropertiesArray; 
private LayoutInflater Inflater; 


public CustomListAdapter(ArrayList<Propety> PropertiesArray) { 

    this.PropertiesArray=PropertiesArray; 

} 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return PropertiesArray.size(); 
} 

@Override 
public Object getItem(int position) { 

    return PropertiesArray.get(position); 
} 

@Override 
public long getItemId(int position) { 

    return position; 
} 

@Override 
public View getView(int position, View convertView, final ViewGroup parent) { 

    if (convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
      convertView = inflater.inflate(R.layout.customlistview, parent, false); 
     } 


     final Propety ListArray = PropertiesArray.get(position); 

     TextView tvPropertyName = (TextView) convertView.findViewById(R.id.tvCity); 
     tvPropertyName.setText(ListArray.getName()); 

     TextView tvPrice = (TextView) convertView.findViewById(R.id.tvprice); 
     tvPrice.setText(ListArray.getPrice()); 

     ImageView imgProperty = (ImageView) convertView.findViewById(R.id.list_image); 
     imgProperty.setImageResource(R.drawable.ic_launcher); 


     convertView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 


    return convertView; 
} 

} 

ListView Код:

ListView propertylistview = (ListView) findViewById(R.id.listview); 
CustomListAdapter customlistview=new CustomListAdapter(PropertiesArray); 
propertylistview.setAdapter(customlistview); 

ListView XML:

<ListView 
    android:id="@+id/listview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/customview" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="24dp" 
    android:background="@drawable/list_selector" 
    android:textAlignment="center" > 

custom.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<SurfaceView 
    android:id="@+id/surface" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" /> 

<TextView 
    android:id="@+id/txtangle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_marginBottom="115dp" 
    android:layout_marginLeft="95dp" 
    android:text="" /> 

<ListView 
    android:id="@+id/listview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/customview" 
    android:layout_marginBottom="10dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:layout_marginTop="24dp" 
    android:background="@drawable/list_selector" 
    android:textAlignment="center" > 

</ListView> 

<view 
    android:id="@+id/customview" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    class="com.example.samplebuapp.CustomCompass" /> 

<view 
    android:id="@+id/view1" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_above="@+id/listview" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="18dp" 
    class="com.example.samplebuapp.CustomView" /> 

<LinearLayout 
    android:id="@+id/rl1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/listview" 
    android:orientation="vertical" 
    android:focusable="false"> 
</LinearLayout> 

</RelativeLayout> 

Даже прокрутка не работает.

Я не могу понять, почему это происходит? Я что-то упускаю?

Любая помощь в разрешении этого оценивается.

+0

может быть, это может помочь: http://www.thepcwizard.in/2012/09/android-creating-custom-listview-for. html – ThePCWizard

+0

Кажется, что события касания не распространяются на ListView. Есть ли что-нибудь в вашем файле макета вместе с ListView, которое может помешать распространению касания? –

+0

Я показываю ListView вместе с другими пользовательскими представлениями и surfaceView. См. Custom.xml – Mahe

ответ

10

Следующее выполнит эту работу в вашем случае.

ListView propertylistview = (ListView) findViewById(R.id.listview); 
    propertylistview.setOnItemClickListener( myListViewClicked): 

     OnItemClickListener myListViewClicked = new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(YourActivity.this, "Clicked at positon = " + position, Toast.LENGTH_SHORT).show(); 

      } 
     }; 

Не забудьте удалить следующие из CustomAdapter

convertView.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

Спасибо @Ninja. Это не работает. Я показываю ListView на поверхностиView. Отображение ListView на SurfaceView вызывает проблемы? – Mahe

+1

Вы используете 'myListViewClicked', прежде чем вы его объявили ..? –

+0

Назначив OnItemClickListener переменной сначала (затем перейдите в setOnItemClickListener), она загадочно решила мою проблему. Затем после этого, когда я делаю это без необходимости присваивания переменной, он все равно работает.) –

-2

Вы должны использовать ListView.setOnItemClickListener() для достижения того, чего хотите.

+0

Но на самом деле OnClickListener в классе customListAdapter должен работать. Не знаю, почему он не работает – Mahe

+0

Это не ответ на реальный вопрос ... –

+0

Я застрял на этом в течение 6 часов, и мне действительно нужна помощь. http://stackoverflow.com/questions/35108940/why-cant-i-remove-an-item/35109304#35109304 –

54

Я согласен с Ниндзя, но вы должны добавить theese в код XML: Вы должны определить на всех дочерних объектов в пункт ListView (TextView, ImageView и т.д.):

android:clickable="false" 
android:focusable="false" 
android:focusableInTouchMode="false" 

И для корневого элемента RelativeLayout/LinearLayout и так, определить:

android:clickable="false" 
android:descendantFocusability="blocksDescendants" 
android:focusable="false" 
android:focusableInTouchMode="false" 

Если вы не определить тех, что они будут «ловить» событие щелчка. И если у вас есть адаптер пользовательских ListView, просто убедитесь, что вы переопределять:

@Override 
public boolean isEnabled(int position) 
{ 
return true; 
} 
+2

Можете ли вы получить более подробную информацию о том, почему нужно установить «android: clickable =" false " android: focusable =" false " android: focusableInTouchMode =" false "' благодаря. – boiledwater

+0

@ boiledwater: я не знаю точно почему, но кажется, что событие click обрабатывается исключительно объектом ListView, и вы должны отключить другую обработку щелчка, чтобы избежать помех. –

+1

Я нахожу http://stackoverflow.com/a/4518810/ 596555 – boiledwater

2

простой код, что решить мою проблему, и вид метода.setOnClickListener быть в пределах моего пользовательского адаптера

view.setFocusable(false) 
2

Если события прикосновения становится перехвачены внутри макета ячейки, в макете для пользовательской ячейки, установите android:descendantFocusability="blocksDescendants" на верхнем уровень макета вашей ячейки. Для меня было слишком больно добавлять атрибуты xml для каждого отдельного представления.

Обратите внимание, что это также может быть установлен в коде:

cell.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);

Я также попытался это с ListView внутри клетки, и мне пришлось переопределить onTouchEvent, чтобы заставить его работать:

public class NoTouchListView extends ListView { 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     return false; 
    } 
} 
+0

Я застрял на этом в течение 6 часов, и мне действительно нужна помощь. http://stackoverflow.com/questions/35108940/why-cant-i-remove-an-item/35109304#35109304 Я застрял на этом в течение 6 часов, и мне действительно нужна помощь. http://stackoverflow.com/questions/35108940/why-cant-i-remove-an-item/35109304#35109304v –

1

Даже у меня была такая же проблема, я имею флажок, сделал следующее Masker itemClickListener работы,

Добавлено следующее про (

android:focusable="false" 
android:focusableInTouchMode="false" 
android:clickable="false" 

и ItemClickListner начали работать.

Для подробного примера вы можете пройти по ссылке,

http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/

Надеется, что это помогает Ура !!

2

Проверьте список раскладку строк однажды:

расположения или любой вид не должно быть `андроид: кликабельна =«истина»и андроида: фокусируемый =«истинный»

если просто удалите и запустите приложение снова.