it-swarm.com.de

OnItemClickListener und OnClickListener funktionieren nicht für ListView

Ich habe eine benutzerdefinierte ListView verwendet und einige Daten werden mit derselben ListView angezeigt. 

Wenn ich auf das Listenansicht-Element klicke, wird der onClickListener nicht aufgerufen. Ich kann keinen Listeneintrag auswählen.

Layoutcode:

<?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>

Adaptercode:

 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-Code:

 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>

Selbst das Scrollen funktioniert nicht.

Ich kann nicht herausfinden, warum dies geschieht. Verpasse ich etwas? 

Jede Hilfe bei der Lösung dieses Problems wird geschätzt.

12
Mahe

Folgendes erledigt die Arbeit in Ihrem Fall.

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();

            }
        };

Vergessen Sie nicht, Folgendes aus dem CustomAdapter zu entfernen

  convertView.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

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

Ich stimme mit Ninjia überein, aber Sie sollten dem XML-Code Folgendes hinzufügen: Sie sollten für alle untergeordneten Objekte in der Elementlistenansicht (TextView, ImageView usw.) Folgendes definieren:

Android:clickable="false"
Android:focusable="false"
Android:focusableInTouchMode="false"

Und für das Stammelement RelativeLayout/LinearLayout und so definieren Sie:

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

Wenn Sie diese nicht definieren, "fangen" sie das Klickereignis. Wenn Sie einen benutzerdefinierten listView-Adapter haben, prüfen Sie einfach, ob Sie ihn überschreiben:

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

Wenn die Berührungsereignisse innerhalb des Zellenlayouts abgefangen werden, legen Sie im Layout für Ihre benutzerdefinierte Zelle Android:descendantFocusability="blocksDescendants" im obersten Layout Ihrer Zelle fest. Für mich war es zu schmerzhaft, jeder einzelnen Ansicht XML-Attribute hinzuzufügen. 

Beachten Sie, dass dies auch im Code eingestellt werden kann:

cell.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);

Ich habe dies auch mit einer ListView in einer Zelle versucht, und ich musste onTouchEvent überschreiben, damit es funktioniert:

public class NoTouchListView extends ListView {

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return false;
    }
}
2
GLee

Überprüfen Sie das Layout Ihrer Listenzeile einmal: 

layout oder eine andere Ansicht sollte nicht "Android: clickable =" true "und sein. Android: focusable =" true "

wenn es dort ist, löschen Sie einfach die Anwendung und führen Sie sie erneut aus.

2
Surendar D

der einfache Code, der mein Problem gelöst hat, und die Methode view.setOnClickListener befinden sich in meinem benutzerdefinierten Adapter 

    view.setFocusable(false)
2
Jhonatas

Sogar ich hatte das gleiche Problem, ich habe ein Ankreuzfeld, das folgende, um masker itemClickListener zu arbeiten,

Folgende Eigenschaften wurden dem Kontrollkästchen hinzugefügt:

Android:focusable="false"
Android:focusableInTouchMode="false"
Android:clickable="false"

und ItemClickListner begann zu arbeiten.

Für ein detailliertes Beispiel können Sie den Link aufrufen,

http://knowledge-cess.com/Android-itemclicklistner-mit-checkbox-or-radiobutton/

Hoffe es hilft Prost !!

1
Gokul Kulkarni

Für TextView sollten Sie auch verwenden 

Android:textIsSelectable="false"

https://developer.Android.com/reference/Android/widget/TextView.html#setTextIsSelectable

1
Karats Mohanraj