FragmentActivity上的OnItemClickListener listView不起作用

时间:2012-12-06 12:16:18

标签: android listview onitemclicklistener onitemclick

这个问题让我发疯了......

我有一个FragmentActivity。在里面我有一个listView,我列出了一些客户端。我需要在列表中单击以执行操作。但是没有触发OnItemClickListener。我不知道为什么。我尝试了我所看到的所有解决方案,并且不起作用......

 public class MainActivity extends FragmentActivity implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor>, SimpleCursorAdapter.ViewBinder, OnItemClickListener{

   @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);

    listActivos = getListView();

    cursorFiltroAutocomplete = Client.listActiveClients(this);

    cursorAdapter = new SimpleCursorAdapter(this, 
            R.layout.client_row,
            cursorFiltroAutocomplete,
            new String[]{Client.NAME,Client.ACCOUNT,Client.ICON,Client.PHOTO,Client.DATEINI,Client.DATEFIN},
            new int[]{R.id.nameClient,/*R.id.accountClient*/R.id.star,R.id.photo,R.id.dateIni,R.id.dateFim}
    );
   listActivos.setAdapter(cursorAdapter);
   cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {   
        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            switch (view.getId()){
            case R.id.nameClient:
                TextView tv = (TextView)view;
                tv.setText(cursor.getString(columnIndex));
                return true;
            //case R.id.accountClient:
            //  return true;
            case R.id.star:
                star = cursor.getInt(cursor.getColumnIndex(Client.ICON));
                tbFavorite = (ToggleButton)view;
                if(star==1)
                    tbFavorite.setChecked(true);
                else
                    tbFavorite.setChecked(false);               
                return true;        
            case R.id.photo:
                byte[] bb = cursor.getBlob(cursor.getColumnIndex(Client.PHOTO));
                ImageView myImage = (ImageView)view;
                if (bb != null) {
                    myImage.setImageBitmap(BitmapFactory.decodeByteArray(bb, 0, bb.length));
                } else {
                    Bitmap bm = null;
                    try  {
                    bm = getBitmapFromAsset("contact_userUpdate.png");
                    } catch (IOException ex){ex.printStackTrace();}
                    if ( bm != null)
                        myImage.setImageBitmap(bm);
                    else 
                        Log.w(MainActivity.class.getName(), "ICON IS NULL");        
                  }
                return true;
            case R.id.dateIni:
                dateIni = cursor.getString(cursor.getColumnIndex(Client.DATEINI));
                TextView dateI = (TextView)view.findViewById(R.id.dateIni);
                dateI.setText(dateIni);
                return true;
            case R.id.dateFim:
                dateFim = cursor.getString(cursor.getColumnIndex(Client.DATEFIN));
                TextView dateF = (TextView)view.findViewById(R.id.dateFim);
                dateF.setText(dateFim);
                return true;
            }
            return false;
        }
    });
     registerForContextMenu(listActivos); 
     listActivos.setClickable(true);
     listActivos.setOnItemClickListener(this);
     getSupportLoaderManager().initLoader(0, null, this);
   }  

   /*********************************Function to get ListView************************/
   private ListView getListView() {
    return (ListView)findViewById(android.R.id.list);
}  

   /*********************************Function onItemClick*****************************/

   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Log.w(MainActivity.class.getName(), "ITEM CLICADO");

}

 /******************************XML with the row of the List************************/
   <?xml version="1.0" encoding="utf-8"?>

 <TableRow xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@android:drawable/list_selector_background"
     android:gravity="fill_horizontal"
     android:longClickable="true"
     android:clickable="true"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:paddingBottom="8dip"
     android:paddingTop="5dip">

  <ImageView
      android:id="@+id/photo"
      android:layout_width="70dp"
      android:layout_height="70dp"
      android:layout_marginLeft="20dp"
      android:layout_marginRight="10dp"
      android:scaleType="fitXY"
      android:src="@drawable/contact_user"
      android:focusable="false"
      android:clickable="false" />

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="fill_horizontal"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="10dp"
      android:layout_weight="1"
      android:gravity="fill"
      android:orientation="vertical">

    <TextView
        android:id="@+id/nameClient"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:minLines="1"
        android:maxLines="1"
        android:focusable="false"
        android:clickable="false"/>
    <LinearLayout
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="fill_horizontal"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_weight="1"
        android:gravity="fill" 
        android:orientation="horizontal">

        <TextView android:id="@+id/dateIni"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/dateIni"
                  android:textColor="#59df8f"
                  android:textAppearance="?android:attr/textAppearanceMedium"
                  android:minLines="1"
                  android:maxLines="1"
                  android:focusable="false"
                  android:clickable="false" />

        <TextView android:id="@+id/dateFim"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/dateFim"
                  android:textColor="#ff3100"
                  android:textAppearance="?android:attr/textAppearanceMedium"
                  android:minLines="1"
                  android:maxLines="1"
                  android:focusable="false"
                  android:clickable="false"/>
      </LinearLayout>           
  </LinearLayout>
        <ToggleButton
            android:id="@+id/star"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="20dp"
            android:background="@drawable/list_star_selector"
            android:focusable="false"
            android:clickable="false"/>
     </TableRow>

   /******************************XML with the list View******************************/
     <?xml version="1.0" encoding="utf-8"?>

   <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:background="@drawable/background_tile"
     android:orientation="vertical" >

  <ListView 
      android:id="@+id/@android:id/list"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:clickable="true"
      />
   </LinearLayout>

有人有想法吗?我把列表的项目“android:focusable =”false“但是不起作用。我把android:descendantFocusability =”beforeDescendants“但结果是一样的....

2 个答案:

答案 0 :(得分:1)

删除listActivos.setClickable(true);android:descendantFocusability="beforeDescendants"

android:focusable="false"
android:clickable="false"

从所有观点来看。它们无法实现你想要的东西。

答案 1 :(得分:0)

在TableRow上设置focusable = false时尝试一下:

 <TableRow xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:background="@android:drawable/list_selector_background"
         android:gravity="fill_horizontal"
         android:longClickable="true"
         android:clickable="true"
         android:minHeight="?android:attr/listPreferredItemHeight"
         android:paddingBottom="8dip"
         android:focusable="false"      // try this
         android:paddingTop="5dip">