Search code examples
androidandroid-listviewonitemclicklistener

OnItemCLickListener not working in ListView custom adapter


I have two activities. One displays all the products in a ListView. Second activity runs when an item is selected. Basically second activity should fire up on item click and it should open the PDF file.

Well the thing is that it does not fire up 2nd activity on item select. Posting the code for your reference.

My .xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:background="@drawable/list_bacg"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/productImage"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="0.25"
        android:adjustViewBounds="true"
        android:padding="5dp"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.55"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="5dp" >

            <!--
             <TextView 
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="wrap_content"
            android:text="Product Name"
            />
            -->

            <TextView
                android:id="@+id/prodName"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.5"
                android:text="Prod Name"
                android:textAppearance="?android:attr/textAppearanceMedium" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingBottom="2dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Price: "
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:id="@+id/storePrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/hori_line"
                android:text="Store Price"
                android:textAppearance="?android:attr/textAppearanceSmall" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingBottom="2dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Offer Price: "
                android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
                android:id="@+id/offerPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Offer Price"
                android:textAppearance="?android:attr/textAppearanceSmall" />
        </LinearLayout>

        <RatingBar
            android:id="@+id/ratingbar_prod"
            style="?android:attr/ratingBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dip" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="5dp" >

            <!--
              <TextView 
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="wrap_content"
            android:text="Category Name"
            />
            -->

            <TextView
                android:id="@+id/storeName"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.5"
                android:text="Store Name"
                android:textAppearance="?android:attr/textAppearanceSmall" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="0.2"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/prodCount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/pc_edit_b"
            android:inputType="number" />
    </LinearLayout>

</LinearLayout>

This is custom view which I want to set on ListView.

And this is the code file.

    listView = (ListView)rootView.findViewById(R.id.lv);
    List<StoreProducts> objects = new ArrayList<StoreProducts>();
    storeInfoAdapter = new    StoreInfoAdapter(getActivity(),android.R.layout.simple_list_item_1,objects);
    listView.setAdapter(storeInfoAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Log.e("Click", "Click");
            StoreProducts productDetails = (StoreProducts) parent.getItemAtPosition(position);
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
             fragmentTransaction.setCustomAnimations(R.anim.ani_out,R.anim.ani_in);
            fragmentTransaction.replace(R.id.frame_container,new                ProductDescFragment(productDetails));
            fragmentTransaction.addToBackStack("All Products");
            fragmentTransaction.commit();
         }
       });

Solution

  • Adding android:focusable="false" to each of the custom layout elements. eg. your custom layout element

    <EditText 
     android:id="@+id/prodCount"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/pc_edit_b"
     android:inputType="number"
     android:focusable="false" />