1

My activity contains a ListView that is populated from an SQLite Database. However I find that the items on the ListView are not clickable. They are not clickable at all in the emulator or on the device. I know there are a lot of similar questions and I tried every possible one of them but to no avail. Please help me make the items clickable.

My Activity Code :

package com.tintin.scheduler_3;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;

public class List_Course extends ListActivity {
DatabaseHelper db;
SimpleCursorAdapter dataAdapter;

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.course_list);

    Button add = (Button) findViewById(R.id.add);
    add.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            startActivity(new Intent(List_Course.this, Add_Course.class));
        }
    });
    Log.v("Button", "On Click Done");
    db = new DatabaseHelper(List_Course.this);
    Log.v("Button", "On Click Done2");
    displayList();
    Log.v("Button", "On Click Done3");
    db.close();
}

public void onResume(){
    Cursor newCursor = db.getAllCourses();
    dataAdapter.changeCursor(newCursor);
    super.onResume();
    db.close();
}

public void displayList(){
    Cursor cursor = db.getAllCourses();
    String from [] = new String[] {db.colName,db.colDisplay};
    int to[] = new int[] {R.id.textView1, R.id.textView2};
    dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem, cursor, from, to, 0){
        public View getView(int position, View convertView, ViewGroup parent){
            final View row = super.getView(position, convertView, parent);
            if(position % 2 == 0)   
                row.setBackgroundColor(Color.parseColor("#D8D8D8"));
            else
                row.setBackgroundColor(Color.parseColor("#D0D0D0"));
            return row;
        }
    };
    ListView lv = getListView();
    lv.setAdapter(dataAdapter);
    registerForContextMenu(lv);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Log.v("Click","Anything "+arg2+" "+arg3);
        }
    });
    cursor.close();
    db.close();
}

}

The Layout of this Activity :- (NOTE: I found that without the TextView the list populated from bottom up even though android:stackfromBottom was not set. So I put in the TextView and put the ListView below that)

<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#D0D0D0" >

<Button
    android:id="@+id/add"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:text="Add a Course" />

<TextView
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:focusableInTouchMode="false"
    android:clickable="false"
    android:focusable="false" >
</TextView>

<ListView
    android:id="@+id/android:list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tv"
    android:layout_above="@+id/add"
    android:layout_alignParentLeft="true" 
    android:divider="#FFFFFF"
    android:clickable="true"
    android:dividerHeight="2dp" >
</ListView>

</RelativeLayout>

And the listitem.xml that defines how rows are to be shown in the listview :-

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:focusableInTouchMode="false"
    android:clickable="false"
    android:focusable="false"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:focusableInTouchMode="false"
    android:clickable="false"
    android:focusable="false"
    android:text="Small Text"
    android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

EDIT:: - I noticed that the items on my ListView are actually clickable. The problem however is that on clicking the list items the orange selection color is not shown. So unless the log is checked, it is not apparent which row was clicked on.However if I remove the part where I am overriding the getView method of the SimpleCursorAdapter while defining dataAdapter, on clicking the items there is an orange selection color that appears in the background of the clicked row.

In other words I am not getting any color for the focused row in list view.

Please run it in one of AVDs to understand what I am trying to say here. I would appreciate if anyone can help me get that color while also overriding the getView method.

tintin
  • 151
  • 1
  • 2
  • 13

3 Answers3

3

I am almost 100% sure that your problem is that some of the views rendered inside the ListView's items is avoiding the ItemClick event. In order to solve this, start by removing the follwing attributes from the TextView:

android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textAppearance="?android:attr/textAppearanceSmall"
Daniel Conde Marin
  • 7,588
  • 4
  • 35
  • 44
2

Try to override onListItemClick() instead of setting OnItemClickListener. Subclasses of ListActivity should override this method. http://developer.android.com/reference/android/app/ListActivity.html

Oleksandr Karaberov
  • 12,573
  • 10
  • 43
  • 70
0

I think all problems are in your xml's code.
Change your listitem.xml as..

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView1"
    android:text="Small Text"
    android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout> 

And from code behind use below code.Ofcourse use this in your onCreate() method

            ls1 = (ListView) findViewById(R.id.yourListviewName);

                ls1.setOnItemClickListener(new OnItemClickListener()
                {
                    @Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
                    { 
                        Toast.makeText(getApplicationContext(), "" + position, Toast.LENGTH_SHORT).show();
                    }
                });

Alternatively see similar issues here..

Community
  • 1
  • 1
ridoy
  • 6,274
  • 2
  • 29
  • 60