style studio event buttonstyle buttons android android-listview clickable android-selector

event - style buttons android studio



Cómo SetView no se puede hacer clic (12)

Tengo este ListView que solo necesita mostrar datos. Entonces no quiero que se pueda hacer clic.

He hecho esto en uno de mis proyectos, y la muestra de abajo funciona bien.

Básicamente, solo necesitas:

  • una fuente de datos (ArrayList, por ejemplo)
  • un widget de ListView
  • un ArrayAdapter, para enlazar la fuente de datos con el ListView


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
---> Asegúrese de que el widget ListView esté usando wrap_content para layout_width y 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>



Eso es todo: no se puede hacer clic en un ListView, simplemente presentando datos en la pantalla.

Tengo este ListView que solo necesita mostrar datos.
Entonces no quiero que se pueda hacer clic.
Primero, traté de cambiar XML listview a:

<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:clickable="false" >

Pero no funcionó.
Para resolver mi problema, establecí el código:

list.setSelector(android.R.color.transparent);

pero no puedo creer que no haya una mejor solución. ¿Alguna idea?


Aquí está, siguiendo el comentario:

Una forma de hacerlo es: ListView.setOnClickListener(null); O

Puedes agregar android:focusable="false" android:focusableInTouchMode="false" O

Otra forma en el diseño de android:listSelector="@android:color/transparent"

Aclamaciones.


Camino fácil:

listView.setSelector(android.R.color.transparent);


De hecho, @override isEnabled () y setOnClickListener (null) setClickable (false) setLongClickable (false) No funcionan para mí. Lo resuelvo anulando performItemClick

@Override public boolean performItemClick(View view, int position, long id) { if(!clickAble){ return false; } return super.performItemClick(view,position,id); }


Podrías usar

yourListView.setOnItemClickListener(null);


Prueba este código

En Adapter.getView ()

i.setOnClickListener( null ); i.setLongClickable( false ); i.setClickable( false );


Simplemente anule isEnabled(position) en su adaptador y devuelva falso

@Override public boolean isEnabled(int position) { return false; }


Simplemente configure android: enabled = "false" para la vista de lista y haría el truco ... ¿por qué es innecesario seguir reemplazando los métodos?


Simplemente copie este método en su clase de adaptador. Nada que hacer .........

@Override public boolean isEnabled(int position) { return false; }

Puede establecer cualquier condición para hacer que un elemento seleccionado no se pueda hacer clic.

@Override public boolean isEnabled(int position) { //Y for non clickable item if(data_list.get(position).equalsIgnoreCase("Y")) { return false; } return true; }


anula el siguiente método. Devuelve falso para decir que no se puede hacer clic en todos los elementos.

@override public boolean areAllItemsEnabled() { return false; }

Y anula el método a continuación para devolver qué elemento no se puede hacer clic

public boolean isEnabled(int position) { if(position == your_item_pos) { return false; } return true; }


android:focusable="true"

a cualquiera de los elementos dentro de la lista vista ahora listview no se puede hacer clic


android:listSelector="@android:color/transparent"

cambia el color con el clic al igual que cuando no se hace clic! por lo que parece como si fuera texto sin formato ... es una solución alternativa.