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.