Option
Option

Reputation: 21

Java Android : onItemLongClick for listView doesn't respond

I'm developing an Android application.

I want to display a list of contacts (using listview) and I want to add 2 alerts dialogs: one by onItemClickListener and the other by onItemLongClickListener.

But the onItemLongClickListener is never called, just the onItemClickListener. I already did it for another application, but here it doesn't work and I don't find why :/

My code:

public class ContactActivity extends AppCompatActivity {
    private ListView listView;
    private ContactAdapter adapter; //my adapter
    private ArrayList<Contact> contacts; //my list of contacts

    //...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact);

        //here i init my "listView" and "contacts"

        adapter = new ContactAdapter(this, contacts);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Log.e("longClick", "ok");
                return true;
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
           @Override
           public void onItemClick(AdapterView<?> a, View v, final int position, long id) {
              //here i display a Dialog
           }
        });



    //some code

So, when I "simple click" on an item of the list, the dialog appears (ok). But when I "long click" on an item of the list, the dialog appears and i don't see the Log...

(The item that i use for my ListView got just 2 EditText)

PS: the XML where my listView is shown

<?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"
   android:background="@color/white">

   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:weightSum="100"
       android:id="@+id/screen">

       <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content">

           <ImageView
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:id="@+id/imageView4"
               android:background="@drawable/w_aff2" />
       </FrameLayout>

       <LinearLayout
           android:orientation="vertical"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:weightSum="100">

           <LinearLayout
               android:orientation="vertical"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:layout_weight="20"
               android:weightSum="100">

               <ListView
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:id="@+id/listView" />
           </LinearLayout>

           <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:layout_weight="80">

           <LinearLayout
               android:orientation="horizontal"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:weightSum="3">

               <FrameLayout
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:layout_weight="1"
                   android:layout_margin="14dp">

                   <ImageButton
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:id="@+id/button_back"
                       android:layout_gravity="center"
                       android:background="@drawable/grey_button"
                       android:src="@drawable/i_back_blue" />
               </FrameLayout>

               <FrameLayout
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:layout_weight="1"
                   android:layout_margin="14dp">

               </FrameLayout>

               <FrameLayout
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:layout_weight="1"
                   android:layout_margin="14dp">

                   <ImageButton
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:id="@+id/button_add"
                       android:src="@drawable/i_add_blue"
                       android:background="@drawable/grey_button"
                       android:layout_gravity="center" />
               </FrameLayout>
           </LinearLayout>
       </FrameLayout>

   </LinearLayout>

</LinearLayout>
   </RelativeLayout>

PS2: Don't look at the Log, I put that for example, but if i put anything else nothing happens, just the dialog appears...

PS3: The XML i use for each item of the listView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:id="@+id/item_screen"
   android:background="@color/white">

   <LinearLayout
       android:orientation="horizontal"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:weightSum="3"
       android:id="@+id/item_layout"
       android:layout_marginRight="16dp"
       android:layout_marginLeft="16dp"
       android:padding="7dp">

       <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:id="@+id/layout_label">

           <TextView
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:text="New Text"
               android:id="@+id/item_label"
               android:layout_weight="1"
               android:textColor="@color/grey_dark"
               android:gravity="center_vertical"
               android:textStyle="bold"
               android:textSize="16dp" />
       </FrameLayout>

       <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:id="@+id/empty_layout">

       </FrameLayout>

       <FrameLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:id="@+id/layout_value"
           android:paddingTop="8dp"
           android:paddingBottom="8dp">

           <TextView
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:text="New Text"
               android:id="@+id/item_value"
               android:textColor="@color/grey_dark"
               android:textStyle="bold"
               android:gravity="center_vertical|center_horizontal"
               android:textSize="16dp" />
       </FrameLayout>

   </LinearLayout>

</LinearLayout>

SOLUTION I had a onSwipeRight() on my listener, it blocked the onItemLongClickListener

here is the code that was blocking the listener

listView.setOnTouchListener(new OnSwipeTouchListener(getApplicationContext()) {
     public void onSwipeRight(){
         //some code
     }
});

Big thanks to ddb for his time :)

Upvotes: 2

Views: 522

Answers (2)

Miguel Benitez
Miguel Benitez

Reputation: 2322

Do not set listView.setLongClickable(true);, listView.setClickable(true); in your java.

Neither

android:longClickable="true"
android:clickable="true"

Inside your xml

Upvotes: 0

ddb
ddb

Reputation: 2435

why are you passing a new AdapterView.OnItemLongClickListener?

just do like this below instead

listView.setOnItemLongClickListener(new OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                    Log.e("longClick", "ok");
                    return true;
                }
            });

Upvotes: 1

Related Questions