2013-06-04 11 views
5

bitte dieses Bild beziehen https://www.dropbox.com/s/6zoj9lw10oc07xa/to_dropbox.pngAdapterView.OnItemClickListener() funktioniert nicht in meinem customAdapter

what i am doing : Ich bin ein list_view zu schaffen, in dem ich benutzerdefinierte Adapter bin hinzufügen.

what i am using : ich verwende, Listview, customAdapter, menuitem. listView: single Listenansicht in ganzen Anwendung customadapters: 3 kundenspezifische Adapter menuitem: 1

How i am implementing : ich habe Datenbank, aus der die Dinge richtig geholt werden, und aus dieser Datenbank habe ich diese Werte in meinem Listview eingegeben durch Filtern dieser Daten in 3 Typen: Der erste Adaptertyp wird standardmäßig (in onCreate) eingegeben.

2. adapter_type wird in meine Listenansicht durch Drücken von menuitem eingetragen.

adapter = new Adapter_forCompletedReminder(array_past_2_day_title , this) ; 
ls.setAdapter(adapter) ; 

3. adapter_type wird in meine Listenansicht durch Drücken von menuitem eingetragen.

adapter = new Adapter_forCompletedReminder(array_other_day_title , this) ; 
ls.setAdapter(adapter) ; 

what is my problem : dieser Code innerhalb onCreate() Methode zugegeben.

ls.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    public void onItemClick(AdapterView<?> adapterView , View view , int position ,long arg3) 
    { 
     Log.i("Item clicked","tushar:itemclicked") ; 
    } 
}); 

wenn ich AdapterView.OnItemClickListener umzusetzen versucht haben(), es funktioniert nicht ... Code abstürzt nicht (keine roten Linien in log cat). Code wird nicht ausgeführt in dem Klick von llist_view_element

danke, für das Lesen meines Problems.

+0

vielleicht hat Ihre Ansichten intercept berührende Ereignisse. Versuchen Sie, in der Methode getView() des Adapters in der convertView die Aktion onClick hinzuzufügen. –

+0

können Sie Adapter_forCompletedReminder-Code bereitstellen? –

+0

mein Adapter_file_is: https://www.dropbox.com/s/ij13ibz3aeqhatz/Adapter_forCompletedReminder.java –

Antwort

10

Sie verwenden das Kontrollkästchen in customview_completedxml_listview.xml. Aus diesem Grund funktioniert der OnItemClick-Listener nicht. Wenn Sie in der Checkbox clickable = "false" setzen, funktioniert onItemclick listener.

Wenn Sie möchten, dass diese Checkbox wird stil arbeiten, dann müssen Sie onclicklistener Ereignis in Ihrer benutzerdefinierten Adapterklasse festlegen.

// I bearbeiten getView

@Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
    LayoutInflater inflater = LayoutInflater.from(ob) ; 
    View v = inflater.inflate(R.layout.customview_completedxml_listview, null) ; 


    TextView txt = (TextView) v.findViewById(R.id.txt_fordisplayingdata) ; 
     txt.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(ob, "Hello", Toast.LENGTH_SHORT).show(); 

     } 
    }); 
     txt.setText(recieved_Array[position]) ; 

     return v ; 
    } 

/////////////////////// // Zweite Lösung gesetzt android: fokussierbarem =“ false "in checkbox

 <?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="50dp" 
     android:orientation="horizontal" 
     > 

    <TextView 
    android:id="@+id/txt_fordisplayingdata" 
    android:layout_width="240dp" 
    android:text="display data" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="10dp" 
    /> 

    <TextView 
    android:id="@+id/txt_fordisplayingLargerdata" 
    android:layout_width="240dp" 
    android:text="display data larger bahut larger " 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_marginLeft="10dp" 
    android:visibility="gone" 
    /> 

    <View 
    android:layout_width="2dp" 
    android:layout_toRightOf="@id/txt_fordisplayingdata" 
    android:layout_height="15dp" 
    android:layout_marginLeft="15dp" 
    android:layout_centerVertical="true" 
    android:id="@+id/view_forcompletedtask" 
    /> 


    <CheckBox 
    android:layout_toRightOf="@id/view_forcompletedtask" 
    android:id="@+id/checkbox_tocomplete" 
    android:layout_marginLeft="15dp" 
    android:layout_width="wrap_content" 
    android:focusable="false" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    /> 

</RelativeLayout> 
+0

Hallo Tushar Pandey Ich hoffe, es wird funktionieren, ich biete zwei Lösung, die beide arbeiten werden, wählen Sie entsprechend Ihrer Implementierung –

+0

danke, für Ihre freundliche Hilfe! –

+0

Du hast mich gerettet. Vielen Dank! –

8

Hier sind einige Dinge, die Sie können versuchen: -

  1. Wenn es irgendeine Taste (oder Checkbox) oder jedes Element in Ihrem Listview-Elemente, die Klick-Ereignis behandelt dann dieses für jedes Element tun: -

    android:focusable = "false" 
    android:focusableInTouchMode = "false" 
    
  2. Versuchen Sie, diese

    list.setItemsCanFocus(false); 
    
  3. Aufschalten der onItemClic k() -Methode

    ls.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView , View view , int position ,long arg3) 
    { 
        Log.i("Item clicked","tushar:itemclicked") ; 
    } 
    }); 
    
+0

Danke, nr.1 arbeitete für mich. Antworten auf andere Beiträge vorgeschlagen 'android: clickable =" false "' würde den Trick allein tun, aber nicht für mich. Die 'fokussierbare funktioniert perfekt. Vielleicht gibt es einen Unterschied zwischen Emulator und Entwickler Eis hier .. – Sti

1

Ich kann wirklich nicht sagen, was genau Problem, das Sie haben, aber ich schrieb sehr einfaches Beispiel für Sie. Probieren Sie es aus und wenn es funktioniert - portieren Sie einfach Ihr aktuelles Projekt in mein Beispielprojekt. https://docs.google.com/file/d/0Bz4Xd7Ju_kbYbVlyd1dvYTJZYTg/edit?usp=sharingalways

P. S .: Ich empfehle Ihnen, über "Best Practices in Android" zu lesen, wenn Sie Ihre Idee beenden (über ViewHolder Muster).

+0

Ich werde, aber es ist ein langer .. Projekt gibt es 6-7 Abschnitte drin. –

+0

versuchen, onClickListener zu Ihrer Ansicht in getView() -Methode hinzuzufügen (vor return v :) diese Antwort ist auf dem Weg zu Rock. –

+0

Öffnen Sie einfach das Projekt und testen Sie, ob es funktioniert. Danach können Sie Ihr Projekt mit diesem Beispiel vergleichen und möglicherweise finden Sie den Fehler "warum onClick nicht funktioniert". onClickListener für die Ansicht in getView() wird in Ihrem Projekt nicht benötigt, da Sie eine einfache Listenlogik haben. scheint, als ob Sie redundante Attribute in Ihren XML-Layouts haben. –

Verwandte Themen