J'ai cette ListView
qui n'a besoin que d'afficher des données.
Donc, je ne veux pas le rendre cliquable.
J'ai d’abord essayé de changer la liste XML en:
<ListView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentTop="true"
Android:clickable="false" >
Mais ça n'a pas marché.
Donc, pour résoudre mon problème, j’ai défini par le code:
list.setSelector(Android.R.color.transparent);
mais je ne peux pas croire qu'il n'y a pas de meilleure solution. Une idée?
La voici après le commentaire:
Une façon de le faire est: ListView.setOnClickListener(null);
OU
Vous pouvez ajouter Android:focusable="false"
Android:focusableInTouchMode="false"
OU
d'une autre manière dans la mise en page Android:listSelector="@Android:color/transparent"
À votre santé.
Remplacez simplement isEnabled (position) dans votre adaptateur et renvoyez false
@Override
public boolean isEnabled(int position) {
return false;
}
remplacer la méthode ci-dessous. Retourne false pour dire que tous les éléments ne sont pas cliquables.
@override
public boolean areAllItemsEnabled() {
return false;
}
Et substituez la méthode ci-dessous pour retourner quel élément n'est pas cliquable
public boolean isEnabled(int position) {
if(position == your_item_pos) {
return false;
}
return true;
}
Android:listSelector="@Android:color/transparent"
cela change la couleur sur laquelle vous avez cliqué comme si vous ne l'avez pas cliqué!.
Copiez simplement cette méthode dans votre classe d’adaptateur . Rien à faire .........
@Override
public boolean isEnabled(int position) {
return false;
}
Vous pouvez définir n'importe quelle condition pour rendre certains éléments sélectionnés non cliquables.
@Override
public boolean isEnabled(int position) {
//Y for non clickable item
if(data_list.get(position).equalsIgnoreCase("Y"))
{
return false;
}
return true;
}
Moyen facile:
listView.setSelector(Android.R.color.transparent);
Vous pourriez utiliser
yourListView.setOnItemClickListener(null);
Android:focusable="true"
à l'un des éléments dans listview maintenant listview ne sera pas cliquable
J'ai ce ListView qui a juste besoin d'afficher des données. Donc, je ne veux pas le rendre cliquable.
Je l'ai fait dans l'un de mes projets, et l'exemple ci-dessous fonctionne bien.
En gros, vous avez juste besoin de:
MainActivity.Java
package com.sample.listview;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.widget.ArrayAdapter;
import Android.widget.ListView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// data source
String[] arrayData = {"Debian", "Ubuntu", "Kali", "Mint"};
// ListView Widget from a Layout
ListView listView = (ListView) findViewById(R.id.mainListView);
// an ArrayAdapter (using a layout as model for displaying the array items)
ArrayAdapter aa = new ArrayAdapter<String>(this, R.layout.main_list_item_layout, arrayData);
// binding the ArrayAdapter with the ListView Widget
listView.setAdapter(aa);
}
}
activity_main.xml
---> Assurez-vous que le widget ListView utilise wrap_content pour layout_width et layout_height
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.sample.listview.MainActivity">
<ListView
Android:id="@+id/mainListView"
Android:layout_width="wrap_content" <---- HERE
Android:layout_height="wrap_content" <---- HERE
/>
</LinearLayout>
main_list_item_layout.xml
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/mainListItem"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:textColor="#ff0000"
Android:textSize="20sp"
>
</TextView>
C'est tout: Un ListView non cliquable, il suffit de présenter des données à l'écran.
Il suffit de définir Android: enabled = "false" dans la liste et cela ferait l'affaire ... pourquoi, pour ne pas surcharger, continuer à ignorer les méthodes ..
Essayez ce code
Dans Adapter.getView ()
i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );
En fait, @ Override isEnabled () et SetOnClickListener (null) SetClickable (false) SetLongClickable (false) Ils ne fonctionnent pas pour moi . Je le résous par remplacer performItemClick
@Override
public boolean performItemClick(View view, int position, long id) {
if(!clickAble){
return false;
}
return super.performItemClick(view,position,id);
}