Clickable ListView element?

Put problem concerning Views, Layouts and other XML-Resources (like AndroidManifest) here.

Clickable ListView element?

Postby eagsalazar » Thu Jul 09, 2009 7:10 am

I have created a custom layout for ListView items and now they are not clickable. Touching an element does nothing and my OnClickListener is not activated. I tried setting android:clickable="true", etc but nothing works. I can select an element by using the trackpad but not by clicking.

I am basically trying to reimplement the Alarm Clock app as an exercise just so you can get a sense for what I'm trying to layout.

Thanks, any help is greatly appreciated.

Below is the relevant code:

layout:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
  4. android"
  5.  
  6.        android:orientation="horizontal"
  7.  
  8.        android:gravity="center_vertical"
  9.  
  10.        android:layout_width="fill_parent"
  11.  
  12.        android:layout_height="fill_parent"
  13.  
  14.        android:clickable="true">
  15.  
  16.  
  17.  
  18.         <LinearLayout
  19.  
  20.                android:layout_height="wrap_content"
  21.  
  22.                android:layout_width="wrap_content"
  23.  
  24.                android:paddingLeft="10sp"
  25.  
  26.                android:layout_weight="1"
  27.  
  28.                android:orientation="vertical"
  29.  
  30.                android:clickable="true" android:focusable="true"
  31.  
  32. android:focusableInTouchMode="true">
  33.  
  34.                 <LinearLayout
  35.  
  36.                        android:layout_height="wrap_content"
  37.  
  38.                        android:layout_width="fill_parent"
  39.  
  40.                        android:gravity="bottom"
  41.  
  42.                        android:orientation="horizontal">
  43.  
  44.                         <TextView
  45.  
  46.                                android:layout_height="wrap_content"
  47.  
  48.                                android:layout_width="wrap_content"
  49.  
  50.                                android:textSize="30sp"
  51.  
  52.                                android:text="1:55"
  53.  
  54.                                android:id="@+id/itemTimeTextView"/>
  55.  
  56.                         <LinearLayout
  57.  
  58.                                android:layout_height="wrap_content"
  59.  
  60.                                android:layout_width="wrap_content"
  61.  
  62.                                android:orientation="vertical" android:layout_marginLeft="3sp"
  63.  
  64. android:paddingBottom="4sp">
  65.  
  66.                                 <TextView
  67.  
  68.                                        android:layout_height="wrap_content"
  69.  
  70.                                        android:layout_width="wrap_content"
  71.  
  72.                                        android:textSize="12sp"
  73.  
  74.                                        android:text="@string/am_string"
  75.  
  76.                                        android:id="@+id/itemAMTextView"/>
  77.  
  78.                                 <TextView
  79.  
  80.                                        android:layout_height="wrap_content"
  81.  
  82.                                        android:layout_width="wrap_content"
  83.  
  84.                                        android:textSize="12sp"
  85.  
  86.                                        android:text="@string/pm_string"
  87.  
  88.                                        android:id="@+id/itemPMTextView"
  89.  
  90. android:includeFontPadding="false"/>
  91.  
  92.                         </LinearLayout>
  93.  
  94.                         <TextView
  95.  
  96.                                android:layout_height="wrap_content"
  97.  
  98.                                android:layout_width="wrap_content"
  99.  
  100.                                android:text="Alarm1"
  101.  
  102.                                android:textSize="30sp"
  103.  
  104.                                android:layout_weight="1"
  105.  
  106.                                android:id="@+id/itemTitleTextView"
  107.  
  108. android:layout_marginLeft="15sp"/>
  109.  
  110.                 </LinearLayout>
  111.  
  112.                 <TextView
  113.  
  114.                        android:layout_height="wrap_content"
  115.  
  116.                        android:layout_width="fill_parent"
  117.  
  118.                        android:text="Mon, Tues, Wed, Thu, Fri"
  119.  
  120.                        android:textSize="12sp"
  121.  
  122.                        android:id="@+id/itemMessageTextView"/>
  123.  
  124.         </LinearLayout>
  125.  
  126.         <CheckBox
  127.  
  128.                android:layout_width="wrap_content"
  129.  
  130.                android:layout_height="wrap_content"
  131.  
  132.                android:layout_gravity="right"
  133.  
  134.                android:id="@+id/itemEnabledCheckBox"
  135.  
  136. android:layout_marginRight="20sp" android:layout_marginLeft="10sp">
  137.  
  138.         </CheckBox>
  139.  
  140.  
  141.  
  142. </LinearLayout>
Parsed in 0.010 seconds, using GeSHi 1.0.8.4


And here is the adapter:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package net.esalazar.alarmsutta;
  3.  
  4.  
  5.  
  6. import java.text.SimpleDateFormat;
  7.  
  8. import java.util.Calendar;
  9.  
  10. import java.util.Date;
  11.  
  12. import java.util.List;
  13.  
  14.  
  15.  
  16. import android.content.Context;
  17.  
  18. import android.view.LayoutInflater;
  19.  
  20. import android.view.View;
  21.  
  22. import android.view.ViewGroup;
  23.  
  24. import android.widget.ArrayAdapter;
  25.  
  26. import android.widget.LinearLayout;
  27.  
  28. import android.widget.TextView;
  29.  
  30.  
  31.  
  32. public class AlarmListAdapter extends ArrayAdapter<Alarm> {
  33.  
  34.  
  35.  
  36.         int resource;
  37.  
  38.  
  39.  
  40.         public AlarmListAdapter(Context context, int textViewResourceId,
  41.  
  42.                         List<Alarm> objects) {
  43.  
  44.                 super(context, textViewResourceId, objects);
  45.  
  46.                 resource = textViewResourceId;
  47.  
  48.         }
  49.  
  50.  
  51.  
  52.         @Override
  53.  
  54.         public View getView(int position, View convertView, ViewGroup parent)
  55.  
  56. {
  57.  
  58.  
  59.  
  60.                 LinearLayout alarmView;
  61.  
  62.  
  63.  
  64.                 Alarm item = getItem(position);
  65.  
  66.  
  67.  
  68.                 Date expiry = item.getExpiry();
  69.  
  70.                 String title = item.getTitle();
  71.  
  72.  
  73.  
  74.                 SimpleDateFormat sdf;
  75.  
  76.                 sdf = new SimpleDateFormat("MM/dd/yyyy");
  77.  
  78.                 String expiryDateString = sdf.format(expiry);
  79.  
  80.                 sdf = new SimpleDateFormat("hh:mm");
  81.  
  82.                 String expiryTimeString = sdf.format(expiry);
  83.  
  84.  
  85.  
  86.                 String message = item.getMessage();
  87.  
  88.  
  89.  
  90.                 if(convertView == null) {
  91.  
  92.                         alarmView = new LinearLayout(getContext());
  93.  
  94.                         String inflater = Context.LAYOUT_INFLATER_SERVICE;
  95.  
  96.                         LayoutInflater vi;
  97.  
  98.                         vi = (LayoutInflater)getContext().getSystemService(inflater);
  99.  
  100.                         vi.inflate(resource, alarmView, true);
  101.  
  102.                 } else {
  103.  
  104.                         alarmView = (LinearLayout)convertView;
  105.  
  106.                 }
  107.  
  108.  
  109.  
  110.                 Calendar calendar = Calendar.getInstance();
  111.  
  112.                 calendar.setTime(expiry);
  113.  
  114.  
  115.  
  116.                 // Get references to all the elements we wish to muck with
  117.  
  118.                 TextView titleTextView = (TextView)alarmView.findViewById
  119.  
  120. (R.id.itemTitleTextView);
  121.  
  122.                 TextView messageTextView = (TextView)alarmView.findViewById
  123.  
  124. (R.id.itemMessageTextView);
  125.  
  126.                 TextView timeTextView = (TextView)alarmView.findViewById
  127.  
  128. (R.id.itemTimeTextView);
  129.  
  130.                 TextView dimmedAA;
  131.  
  132.                 if( calendar.get(Calendar.HOUR_OF_DAY) > 12 ) {
  133.  
  134.                         dimmedAA = (TextView)alarmView.findViewById(R.id.itemAMTextView);
  135.  
  136.                 } else {
  137.  
  138.                         dimmedAA = (TextView)alarmView.findViewById(R.id.itemPMTextView);
  139.  
  140.                 }
  141.  
  142.  
  143.  
  144.                 // Dim the AM/PM label accordingly leaving the correct one bright
  145.  
  146.                 dimmedAA.setTextColor(13355979);
  147.  
  148.  
  149.  
  150.                 // Set the title and message accordingly.  We prefix the message
  151.  
  152. with
  153.  
  154.                 // the date just to be coy.
  155.  
  156.                 titleTextView.setText(title);
  157.  
  158.                 messageTextView.setText( expiryDateString + "  " + message );
  159.  
  160.                 timeTextView.setText(expiryTimeString);
  161.  
  162.  
  163.  
  164.                 return alarmView;
  165.  
  166.  
  167.  
  168.         }
Parsed in 0.042 seconds, using GeSHi 1.0.8.4


And here are code snips of me using this:

To set up:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.        aa = new AlarmListAdapter(this, R.layout.alarmlist_item,
  2.  
  3. alarms);
  4.  
  5.         alarmsListView.setAdapter(aa);
  6.  
  7.  
Parsed in 0.031 seconds, using GeSHi 1.0.8.4

To update:
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2.  
  3.  
  4.                 switch( requestCode ) {
  5.  
  6.                         case( NEW_ALARM ): {
  7.  
  8.  
  9.  
  10.                                 Alarm newAlarm = new Alarm(expiryString, title, message);
  11.  
  12.                                 alarms.add(newAlarm);
  13.  
  14.                                 aa.notifyDataSetChanged();
  15.  
  16.  
  17.  
  18.                                 break;
  19.  
  20.  
  21.  
  22.                         }
  23.  
  24.                         case( EDIT_ALARM ): {
  25.  
  26.  
  27.  
  28.                                 // If we only get the default value of -1 then something is wrong
  29.  
  30.                                 if( index == -1 )
  31.  
  32.                                         throw new RuntimeException();
  33.  
  34.  
  35.  
  36.                                 alarms.get(index).setExpiry(expiryString);
  37.  
  38.                                 alarms.get(index).setTitle(title);
  39.  
  40.                                 alarms.get(index).setMessage(message);
  41.  
  42.                                 aa.notifyDataSetChanged();
  43.  
  44.  
  45.  
  46.                                 break;
  47.  
  48.  
  49.  
  50.                         }
  51.  
  52.                 }
Parsed in 0.037 seconds, using GeSHi 1.0.8.4
eagsalazar
Freshman
Freshman
 
Posts: 2
Joined: Thu Jul 09, 2009 7:02 am

Top

Postby javahollic » Sun Oct 04, 2009 10:20 pm

I just hit this today, was able to turn on 'long' click, solving half my need, but for some reason, I cannot get a single click selection event. Did you ever figure this out?

Cheers,
Andy
javahollic
Once Poster
Once Poster
 
Posts: 1
Joined: Sun Oct 04, 2009 10:17 pm

onListItemClick

Postby guian » Tue Oct 06, 2009 8:47 am

I use a listActivity and get the event : 'onListItemClick'
can this help ?
guian
Developer
Developer
 
Posts: 35
Joined: Tue Nov 18, 2008 3:43 pm

Top

Return to View, Layout & Resource Problems

Who is online

Users browsing this forum: No registered users and 8 guests