android - seleccionar - public void onitemclick adapterview<?> adapterview view view int i long l
Android-ListView-performItemClick (22)
Al utilizar Listview (adaptador de matriz simple o adaptador personalizado), defina listview y, finalmente, realice make click.
Por ejemplo:
//At onCreate function:
lv = (ListView) findViewById(R.id.listView);
lv.setAdapter(new CustomAdapter(List_item.this, list, images));
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// on click function works
}
}
int position = 0;
lv.performItemClick(lv.getAdapter().getView(position, null, null), position, lv.getAdapter().getItemId(position));
Nota: Después de crear setOnItemClickListener, solo debe hacer clic en Realizar. De lo contrario, no será correcto.
Estoy enfrentando algunas dificultades cuando trato de usar la función performItemClick de ListView.
Todo lo que quiero hacer es realizar un clic programáticamente en el primer elemento de la lista.
¿Cómo puedo hacer eso? Busqué esa función en la documentación, pero realmente no entendí sus parámetros.
Intenté algo como:
myListView.performItemClick(myListView.getChildAt(0), 0, myListView.getChildAt(0).getId());
Pero no funcionó (myListView.getChildAt(0) returns null)
¡Gracias de antemano!
El performClick probablemente se invocó antes de que se completara listview, puso breakpoint en getView y en performItemClick y verificó cuál se llama primero
En Firstly traté de usar este código en mi Fragment (Master / Detail -> NameListFragment)
getListView().performItemClick(null, 0, getListView().getAdapter().getItemId(0));
Pero no funcionó. Cuando hice el @Override onStart()
en fragmento y moví mi código a onStart()
. Después de eso, funciona correctamente para mí.
Estaba trabajando con performItemClick y funcionó para mí, pero con un pequeño problema. intenté colorear el fondo del elemento presionado, pero nunca funcionó, solo tenga en cuenta que si pasa la vista convertida como null (el segundo parámetro) y luego intenta hacer algo en OnClick (), esto no se realizará porque el método getView () del adaptador le da un objeto de vista diferente. necesita manipular el método getView () de su adaptador para capturar la Vista, de modo que pueda usarla.
Esto es de Begining Android Games. Crea una lista simple de elementos en los que puede hacer clic para abrir una nueva actividad. Cada elemento de la lista, por supuesto, también debería agregarse a AndroidManifest.xml como una actividad separada con un nombre .ListItem #.
public class MainActivity extends ListActivity {
String tests[] = { "ListItem1",
"ListItem2",
"ListItem3",
"ListItem4"};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tests));
}
@Override
protected void onListItemClick(ListView list, View view, int position, long id) {
super.onListItemClick(list, view, position, id);
String testName = tests[position];
try {
Class<?> classInstance = Class.forName("your.package.name." + testName);
Intent intent = new Intent(this, classInstance);
startActivity(intent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Esto funcionó para mí.
listView.performItemClick(
listView.getAdapter().getView(position, null, null), position, position);
use el adaptador para obtener la vista de la posición del artículo. Los otros 2 parámetros que no quería, así que los dejé nulos. Dejar convertView null hace que el adaptador muestre una nueva vista. Es un problema de rendimiento, pero como esto solo ocurre de vez en cuando, no tendrá mucho efecto. No necesito especificar el padre para nada porque no lo estoy usando.
posición es el lugar donde se encuentra su artículo. Además, estas 2 líneas de código antes de su performItemClick crean la ilusión de tener el elemento de la lista seleccionado. También aseguran que el elemento apropiado esté en la pantalla.
listView.requestFocusFromTouch();
listView.setSelection(position);
Esto funcionó para mí:
listView.getAdapter().getView(1, null, null).performClick();
Esto funciona mejor para mi Ejecuta esto en el hilo principal.
new Handler().post(new Runnable() {
@Override
public void run() {
mList.performItemClick(
mList.getChildAt(mActivePosition),
mActivePosition,
mList.getAdapter().getItemId(mActivePosition));
}
});
Esto es similar a la respuesta de José Arun, pero pondrá en cola un mensaje al hilo principal para dar al ListView
algún tiempo para iniciar.
Esto funciona para mí:
listview.getSelectedView().performClick();
Hoy me encuentro con este problema raro y trato de solucionarlo lo mejor posible. Mi condición es que, cuando inicie por primera vez el diseño, necesito verificar algún elemento. Pero cuando uso gridView.getChildAt (posición), siempre devuelvo nulo. Me encontré con este problema antes, causado por No terminar el diseño de dibujo. Entonces envío un mensaje de correo. handler.postDelayed (.., ..), Funciona. Gracias, quienes mueven esta Excepción.
Probé el código a continuación y funcionó.
getListView().performItemClick(null, 0, getListAdapter().getItemId(0));
El primer parámetro (vista) puede ser nulo.
Prueba este:
public static boolean performClicKOnLisViewFromIndex(ListView listView, int index){
if(listView != null){
if(listView.getAdapter()!= null && listView.getAdapter().getCount() >0 && listView.getAdapter().getCount() > index ){
listView.performItemClick(
listView.getAdapter().getView(index, null, null),
index, listView.getItemIdAtPosition(index));
return true;
}
}
return false;
}
Si está trabajando en un caso de prueba de unidad. Intente utilizar getInstrumentation (), waitForIdleSync (), para esperar que se cargue la lista, y extienda ActivityInstrumentationTestCase2. Consulte esta answer .
Si obtiene resultados extraños al usar getView
, esto se debe a que el elemento de la lista que desea no existe dentro de las partes visibles. Utilizar a continuación:
private View getViewFromAdapterByPosition(int position, ListView listView)
{
View view;
int firstVisiblePos = listView.getFirstVisiblePosition();
int lastVisiblePos = listView.getLastVisiblePosition();
if (position < firstVisiblePos || position > lastVisiblePos) {
view = listView.getAdapter().getView(position, null, listView);
} else {
view = listView.getChildAt(position - firstVisiblePos);
}
return view;
}
Y entonces,
listView.performItemClick(getViewFromAdapterByPosition(index, listView), index, 0);
Usando el código @sulal propuesto, puede colocarlo en onLoadFinished, si usa un LoaderManager. Por ejemplo, algo así como
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
//....
// mSelectedId keeps the currently selected id
// INVID is an invalid value
if (mSelectedId == INVID) { // nothing selected
// sulal''s code
new Handler().post(new Runnable() {
@Override
public void run() {
mList.performItemClick(
mList.getChildAt(mActivePosition),
mActivePosition,
mList.getAdapter().getItemId(mActivePosition));
mSelectedId = mList.getAdapter().getItemId(mActivePosition);
}
});
}
mActivePosition puede ser 0 (es decir, la posición en el primer elemento) o una posición mantenida durante, por ejemplo, en Pausa
Yo fui con
listView.getAdapter().getView(position, null, null).performClick();
esto puede ser viejo, pero esto puede ayudar:
lvList.performItemClick(null, index, lvList.getItemIdAtPosition(index) );
NOTA: el primer parámetro es nulo y seguirá funcionando, si tiene un adaptador personalizado, convertView se llenará con diseño y vista personalizados, y tal.
-cheers / codificaciones felices.
getListView().performItemClick(null, 0, 0)
hizo el truco para mí (para la posición 0
).
Dejar caer algo de experiencia .
El uso de listview1.performItemClick también activará listview1.OnItemClickListener si está utilizando el oyente con la misma lista de vista en su código.
Hope It helps
Este trabajo para mí Si obtiene resultados extraños al usar getView, esto se debe a que el elemento de la lista que desea no existe dentro de las partes visibles. Utilizar a continuación:
private View getViewFromAdapterByPosition(int position, ListView listView)
{
View view;
int firstVisiblePos = listView.getFirstVisiblePosition();
int lastVisiblePos = listView.getLastVisiblePosition();
if (position < firstVisiblePos || position > lastVisiblePos) {
view = listView.getAdapter().getView(position, null, listView);
} else {
view = listView.getChildAt(position - firstVisiblePos);
}
return view;
}
Y entonces,
listView.performItemClick(getViewFromAdapterByPosition(index, listView), index, 0);
mList.performItemClick(
mList.getAdapter().getView(mActivePosition, null, null),
mActivePosition,
mList.getAdapter().getItemId(mActivePosition));
¡Donde mActivePosition es su posición de clic! ¡Todo lo mejor! :)
mList.performItemClick(
mList.getChildAt(mActivePosition),
mActivePosition,
mList.getAdapter().getItemId(mActivePosition));
donde mActivePosition
es la posición de la vista secundaria en la Vista de lista.