J'ai utilisé un ListView personnalisé et j'affiche des données en utilisant le même ListView.
Lorsque je clique sur l'élément de liste, le onClickListener n'est pas appelé. Je ne peux sélectionner aucun élément de la liste.
Code de mise en page:
<?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"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_marginBottom="16dp"
Android:background="@drawable/list_selector"
Android:clickable="true"
Android:orientation="horizontal"
Android:padding="5dip" >
<LinearLayout
Android:id="@+id/imgProperty"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_marginRight="5dip"
Android:padding="3dip" >
<ImageView
Android:id="@+id/list_image"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:contentDescription="@string/app_name"
Android:src="@drawable/ic_launcher"
Android:focusable="false"/>
</LinearLayout>
<TextView
Android:id="@+id/tvCity"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true"
Android:layout_marginLeft="75dip"
Android:layout_toRightOf="@+id/list_image"
Android:paddingBottom="10dip"
Android:text="property"
Android:textColor="#040404"
Android:textSize="15sp"
Android:textStyle="bold"
Android:typeface="sans" />
<TextView
Android:id="@+id/tvprice"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottom="@+id/imgProperty"
Android:layout_alignLeft="@+id/tvCity"
Android:text="Price"
Android:focusable="false"/>
</RelativeLayout>
Code de l'adaptateur:
public class CustomListAdapter extends BaseAdapter {
ArrayList<Propety> PropertiesArray;
private LayoutInflater Inflater;
public CustomListAdapter(ArrayList<Propety> PropertiesArray) {
this.PropertiesArray=PropertiesArray;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return PropertiesArray.size();
}
@Override
public Object getItem(int position) {
return PropertiesArray.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.customlistview, parent, false);
}
final Propety ListArray = PropertiesArray.get(position);
TextView tvPropertyName = (TextView) convertView.findViewById(R.id.tvCity);
tvPropertyName.setText(ListArray.getName());
TextView tvPrice = (TextView) convertView.findViewById(R.id.tvprice);
tvPrice.setText(ListArray.getPrice());
ImageView imgProperty = (ImageView) convertView.findViewById(R.id.list_image);
imgProperty.setImageResource(R.drawable.ic_launcher);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
Code ListView:
ListView propertylistview = (ListView) findViewById(R.id.listview);
CustomListAdapter customlistview=new CustomListAdapter(PropertiesArray);
propertylistview.setAdapter(customlistview);
ListView XML:
<ListView
Android:id="@+id/listview"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_below="@+id/customview"
Android:layout_marginBottom="10dp"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="24dp"
Android:background="@drawable/list_selector"
Android:textAlignment="center" >
custom.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<SurfaceView
Android:id="@+id/surface"
Android:layout_width="fill_parent"
Android:layout_height="match_parent" />
<TextView
Android:id="@+id/txtangle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_marginBottom="115dp"
Android:layout_marginLeft="95dp"
Android:text="" />
<ListView
Android:id="@+id/listview"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_below="@+id/customview"
Android:layout_marginBottom="10dp"
Android:layout_marginLeft="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginTop="24dp"
Android:background="@drawable/list_selector"
Android:textAlignment="center" >
</ListView>
<view
Android:id="@+id/customview"
Android:layout_width="110dp"
Android:layout_height="110dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
class="com.example.samplebuapp.CustomCompass" />
<view
Android:id="@+id/view1"
Android:layout_width="110dp"
Android:layout_height="110dp"
Android:layout_above="@+id/listview"
Android:layout_alignParentRight="true"
Android:layout_marginRight="18dp"
class="com.example.samplebuapp.CustomView" />
<LinearLayout
Android:id="@+id/rl1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_below="@+id/listview"
Android:orientation="vertical"
Android:focusable="false">
</LinearLayout>
</RelativeLayout>
Même le défilement ne fonctionne pas.
Je suis incapable de comprendre pourquoi cela se produit-il? Est-ce que je manque quelque chose?
Toute aide pour résoudre ceci est appréciée.
Ce qui suit fera le travail dans votre cas.
ListView propertylistview = (ListView) findViewById(R.id.listview);
propertylistview.setOnItemClickListener( myListViewClicked ):
OnItemClickListener myListViewClicked = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(YourActivity.this, "Clicked at positon = " + position, Toast.LENGTH_SHORT).show();
}
};
N'oubliez pas de supprimer les éléments suivants du CustomAdapter
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show();
}
});
Je suis d'accord avec Ninjia mais vous devez ajouter ceci au code XML: Vous devez définir sur tous les objets enfants de la liste itemview (TextView, ImageView etc.):
Android:clickable="false"
Android:focusable="false"
Android:focusableInTouchMode="false"
Et pour l'élément racine RelativeLayout/LinearLayout et ainsi, définissez:
Android:clickable="false"
Android:descendantFocusability="blocksDescendants"
Android:focusable="false"
Android:focusableInTouchMode="false"
Si vous ne les définissez pas, ils "attraperont" l'événement de clic. Et si vous avez un adaptateur listView personnalisé, vérifiez simplement que vous substituez:
@Override
public boolean isEnabled(int position)
{
return true;
}
Vérifiez votre disposition de ligne de liste une fois:
la mise en page ou une vue ne doit pas être `Android: clickable =" true "et Android: focusable = "true"
si c'est le cas, supprimez et exécutez à nouveau l'application.
le code simple qui a résolu mon problème et la méthode view.setOnClickListener se trouvent dans mon adaptateur personnalisé
view.setFocusable(false)
Même si j’avais le même problème, j’ai une case à cocher, a fait ce qui suit pour masquer le travail d’articleClickListener,
Ajout des propriétés suivantes à la case à cocher,
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:clickable="false"
et ItemClickListner a commencé à fonctionner.
Pour un exemple détaillé, vous pouvez passer par le lien,
http://knowledge-cess.com/Android-itemclicklistner-with-checkbox-or-radiobutton/
J'espère que ça aide Cheers !!
Pour TextView, vous devez également utiliser
Android:textIsSelectable="false"
https://developer.Android.com/reference/Android/widget/TextView.html#setTextIsSelectable