2010-07-01 5 views
1

Je fais un adaptateur personnalisé afin que je puisse afficher une liste d'éléments avec des icônes qui ressemble au menu qui apparaît lorsque vous cliquez longuement sur l'écran d'accueil.Android ListView article de l'adaptateur personnalisé non sélectionnable

Pour une raison quelconque, les éléments de la liste ne sont pas cliquables. Le peut être navigué avec le D-pad, mais ils ne peuvent pas être cliqués en aucune façon. Je pensais que le problème était avec le AlertDialog que j'utilisais alors j'ai remplacé un adaptateur de travail que j'avais ailleurs, mais j'ai le même problème ici.

Mon adaptateur ressemble à ceci:

ArrayList<IconListItem> mItems; 
LayoutInflater mInflater; 

public IconListAdapter(Context context, ArrayList<IconListItem> items) { 
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mItems = items; 
} 

public IconListAdapter(Context context) { 
    this(context, new ArrayList<IconListItem>()); 
} 

public void add(IconListItem item) { 
    mItems.add(item); 
    notifyDataSetChanged(); 
    return item; 
} 

public void remove(IconListItem item) { 
    mItems.remove(item); 
    notifyDataSetChanged(); 
} 

@Override 
public int getCount() { 
    return mItems.size(); 
} 

@Override 
public IconListItem getItem(int position) { 
    return mItems.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    if(convertView == null){ 
     view = mInflater.inflate(R.layout.two_line_icon_list_item, null); 
    } else { 
     view = convertView; 
    } 


    IconListItem item = mItems.get(position); 
    TextView lineOne = (TextView) view.findViewById(R.id.firstLine); 
    TextView lineTwo = (TextView) view.findViewById(R.id.secondLine); 
    ImageView iconImage = (ImageView) view.findViewById(R.id.icon); 

    lineOne.setVisibility(View.VISIBLE); 
    lineTwo.setVisibility(View.VISIBLE); 
    iconImage.setVisibility(View.VISIBLE); 

    lineOne.setText(item.getText()); 

    if (item.getSubtext() == null) 
     lineTwo.setVisibility(View.GONE); 
    else 
     lineTwo.setText(item.getSubtext()); 



    if (item.getIcon() == null) 
     iconImage.setVisibility(View.GONE); 
    else 
     iconImage.setImageDrawable(item.getIcon()); 


    return view; 
} 

Et le XML, il est gonfler:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="6dip" 
> 
    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_marginRight="6dip" 
    /> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_weight="1" 
     android:layout_height="fill_parent" 
    > 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
      android:id="@+id/firstLine" 
      android:ellipsize="marquee" 
      android:inputType="text" 
     /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="0dip" 
      android:layout_weight="1"   
      android:ellipsize="marquee" 
      android:id="@+id/secondLine" 
      android:inputType="text" 
     />   
    </LinearLayout> 
</LinearLayout> 

EDIT:

Quand je dis qu'ils ne sont pas cliquables, je veux dire qu'ils articles font ne surligne pas en orange lorsque je les appuie, et onItemClick ne s'appelle jamais.

Dans mon code, j'ai cela, un adaptateur différent pour un autre but et il fonctionne parfaitement

this.foos= foos; 
fa = new FooAdapter(this.foos); 
fooList.setAdapter(fa); 

// View the details for an item when it is selected 
fooList.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
     Intent i = new Intent(MyActivity.this, MyOtherActivity.class); 
     i.putExtra("foo", ((fooAdapter)arg0.getAdapter()).getItem(arg2)); 
     i.putExtra("list_position", arg2); 
     MyActivity.this.startActivityForResult(i, 0); 
    } 
}); 

Mais quand j'échange les 3 premières lignes pour

IconListAdapter ila = new IconListAdapter(this); 
ila.add(0, "Test 1", android.R.drawable.ic_menu_mylocation); 
ila.add(0, "Test 2", android.R.drawable.ic_menu_edit); 
ila.add(0, "Test 3", android.R.drawable.ic_menu_search); 
groupList.setAdapter(ila); 

il cesse de fonctionner.

+0

Que voulez-vous dire par « ne peut pas être cliqué »? Montrez-nous où vous définissez l'écouteur de clic, s'il vous plaît. – Cristian

+0

@Cristian Castiblanco J'ai édité la question plus d'informations sur le problème. –

Répondre

1

Je trouve le problème. J'ai supprimé les lignes de mon fichier de mise en page une par une jusqu'à ce que je trouve la cause.

Les lignes à l'origine du problème étaient les deux lignes android:inputType="text". Ils ont dû amener le système à penser que les deux TextView étaient des entrées. Je l'ai changé pour android:inputType="none" et maintenant cela fonctionne.

Il aurait certainement été bien si l'énorme bulle d'aide disant que singleLine était dépréciée l'avait suggéré.

-1

Vous devez implémenter setOnItemClickListener qui sera appelée lorsqu'un élément de votre ListView est cliqué.

Quelque chose comme ceci:

ListView lv = (ListView)findViewById(R.id.your_list_view); 

lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { 
     Log.v(TAG, "Item clicked"); 
     // whatever you want to do with the clicked item... 
    } 
}); 
+0

Non, ce n'est pas le problème. J'ai un OnItemClickListener implémenté. Quelque chose d'autre est faux. Les éléments de la liste ne sont pas cliquables, et je veux dire par là qu'ils ne sont même pas surlignés en orange quand je les appuie. –

0

Après avoir passé quelques heures, je trouve que si cette propriété est définie sur l'une des textviews au sein de votre liste, articles ListView ne seront pas sélectionnables:

android:textIsSelectable="true" 
Questions connexes