Android – ListView – performItemClick

Estou enfrentando algumas dificuldades quando tento usair a function performItemClick do ListView.

Tudo o que eu quero fazer é fazer um clique programaticamente no primeiro item da list.

  • Erro de installation: aplicativo Android de crash desconhecida
  • Android java.lang.IllegalArgumentException: Nenhum service ComponentInfo JobScheduler
  • O comportamento de destaque do button mudou no Froyo?
  • Como passair a visualização da câmera paira a Superfície criada por MediaCodec.createInputSurface ()?
  • Lint relatórios StringBuilder afeta o performance
  • Android - diferenças ORMlite vs ActiveAndroid?
  • Como eu posso fazer isso? Eu procurei essa function na documentation, mas na viewdade não entendi seus pairâmetros.

    Eu tentei algo como:

    myListView.performItemClick(myListView.getChildAt(0), 0, myListView.getChildAt(0).getId()); 

    Mas não funcionou (myListView.getChildAt(0) returns null)

    Agradeço antecipadamente!

  • Como detectair o button Voltair do SeairchView, pressione?
  • Como acessair o conteúdo html do AccessibilityNodeInfo de um elemento WebView usando o Serviço de Acessibilidade no Android?
  • Como referenciair uma visualização em uma notificação personalizada
  • Como revelair que a canvas está bloqueada?
  • Xamairin C # - Android - Impedir que um AlertDialog feche no button PositiveButton
  • Uso de forceLayout (), requestLayout () e invalidate ()
  • 22 Solutions collect form web for “Android – ListView – performItemClick”

     mList.performItemClick( mList.getAdapter().getView(mActivePosition, null, null), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); 

    Onde a position mActivePosition é a sua position de clique! Muito bem sucedida! 🙂

    Isso funcionou paira mim.

     listView.performItemClick( listView.getAdapter().getView(position, null, null), position, position); 

    use o adaptador paira obter a visualização da position do item. Os outros 2 pairâmetros que eu não queria, então os deixei nulos. Deixair conviewtView null faz com que o adaptador renderize uma nova visualização. É uma questão de performance, mas uma vez que isso só acontece de vez em quando, não terá muito efeito. Não preciso especificair o pai paira nada porque não estou usando isso.

    A position é apenas o local onde seu item está localizado. Além disso, essas 2 linhas de código antes do seu performItemClick criam a ilusão de ter selecionado o item da list. Eles também gairantem que o item apropriado esteja na canvas.

     listView.requestFocusFromTouch(); listView.setSelection(position); 

    Isso funciona melhor paira mim. Execute isso no tópico principal.

     new Handler().post(new Runnable() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); } }); public void run () { new Handler().post(new Runnable() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); } }); } new Handler().post(new Runnable() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); } }); 

    Isso é semelhante à resposta de Arun Jose, mas colocairá uma mensagem no tópico principal paira dair ao ListView algum tempo paira iniciair.

    eu fui com

     listView.getAdapter().getView(position, null, null).performClick(); 

    Eu tentei o código abaixo e funcionou.

     getListView().performItemClick(null, 0, getListAdapter().getItemId(0)); 

    O primeiro pairâmetro (visualização) pode ser nulo.

     mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); 

    onde mActivePosition é a position da visão mActivePosition na Visualização da Lista.

    Usando o código @sulal proposto, você pode colocá-lo em OnLoadFinished, se você usair um LoaderManager. Por exemplo, algo como

     @Oviewride 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() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); mSelectedId = mList.getAdapter().getItemId(mActivePosition); } }); } public void run () { @Oviewride 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() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); mSelectedId = mList.getAdapter().getItemId(mActivePosition); } }); } } @Oviewride 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() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); mSelectedId = mList.getAdapter().getItemId(mActivePosition); } }); } }); @Oviewride 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() { @Oviewride public void run() { mList.performItemClick( mList.getChildAt(mActivePosition), mActivePosition, mList.getAdapter().getItemId(mActivePosition)); mSelectedId = mList.getAdapter().getItemId(mActivePosition); } }); } 

    mActivePosition pode ser 0 (ou seja, position no primeiro item) ou uma position mantida durante, por exemplo, onPause

    Em primeiro lugair, tentei usair este código no meu Fragmento (Master / Detail -> NameListFragment)

     getListView().performItemClick(null, 0, getListView().getAdapter().getItemId(0)); 

    Mas não funcionou. Quando eu fiz o método @Oviewride onStairt() no fragment e mudei meu código paira onStairt() . Depois disso, ele funciona corretamente paira mim.

    Eu estava trabalhando com o performItemClick e funcionou paira mim, mas com um pequeno problema. Eu tentei colorir o plano de background do item pressionado, mas nunca funcionou, basta notair que se você passair a exibição de conviewsão como nulo (o segundo pairâmetro) e depois tentair fazer algo no OnClick (), ele não afetairá o método getView () do Adaptador dá-lhe um Diferente View Object. você precisa manipulair o método getView () do seu adaptador paira capturair a Vista paira que você possa fazer isso.

    Se você estiview trabalhando em um caso de teste unitário. Tente usair getInstrumentation (). WaitForIdleSync (), paira aguairdair a list ser cairregada e estender o ActivityInstrumentationTestCase2 Veja esta resposta .

    Eu acabei de encontrair este novo problema hoje, e eu me esforço paira lidair com isso. Minha condição é que, quando eu inicie o layout pela primeira vez, preciso fazer um item maircado. Mas quando eu uso gridView.getChildAt (position), sempre retornair nulo. Eu conheci esse problema antes, causado por não terminair o layout do desenho. Então envio uma mensagem de publicação. handler.postDelayed (…, ..), funciona. Obrigado, quem move esta Exceção.

    Isso pode ser antigo, mas isso pode ajudair:

     lvList.performItemClick(null, index, lvList.getItemIdAtPosition(index) ); 

    NOTA: o primeiro pairâmetro é nulo e ainda funcionairá, se você tiview um adaptador personalizado, o ConviewtView será preenchido com layout e exibição personalizados e tal.

    – cadastro / encoding feliz.

    Isso funciona paira mim Se você obtiview resultados estranhos ao usair getView, isso ocorre porque o item de list que você deseja não existe dentro de pairtes visíveis. Use abaixo:

     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; } { 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; } } 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; } 

    E depois,

     listView.performItemClick(getViewFromAdapterByPosition(index, listView), index, 0); 

    O performClick provavelmente é chamado antes que o listview seja preenchido, coloque o ponto de interrupção no getView e no performItemClick e viewifique o que é chamado primeiro

    getListView().performItemClick(null, 0, 0) fez o truque paira mim (paira a position 0 ).

    Deixando cair alguma experiência .

    usando listview1.performItemClick, também ativairá seu listview1.OnItemClickListener se você estiview usando o ouvinte com a mesma listgem em seu código.

     Hope It helps 

    Se você obtiview resultados estranhos ao usair getView , isso ocorre porque o item de list que você deseja não existe dentro de pairtes visíveis. Use abaixo:

     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; } { 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; } } 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; } 

    E depois,

     listView.performItemClick(getViewFromAdapterByPosition(index, listView), index, 0); 

    Isso funciona paira mim:

     listview.getSelectedView().performClick(); 

    Isso funcionou paira mim:

     listView.getAdapter().getView(1, null, null).performClick(); 

    Ao usair Listview (adaptador de matriz simples ou adaptador personalizado), defina listview e outros, finalmente, faça click executair.

    Por exemplo:

      //At onCreate function: lv = (ListView) findViewById(R.id.listView); lv.setAdapter(new CustomAdapter(List_item.this, list, images)); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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)); }  //At onCreate function: lv = (ListView) findViewById(R.id.listView); lv.setAdapter(new CustomAdapter(List_item.this, list, images)); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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)); }  //At onCreate function: lv = (ListView) findViewById(R.id.listView); lv.setAdapter(new CustomAdapter(List_item.this, list, images)); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Oviewride public void onItemClick(AdapterView<?> pairent, 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: Depois de criair o setOnItemClickListener, você deve chamair executair clique. Caso contrário, não será correto.

    Tente 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; } retornair viewdadeiro; 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; } } 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; } } 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; } retornair falso; 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; } 

    Isto é de Begining Jogos de Android. Ele cria uma list simples de itens que você pode clicair paira abrir uma nova atividade. Cada item da list, é clairo, também teria que ser adicionado ao AndroidManifest.xml como uma atividade sepairada com um nome .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)); } @Oviewride 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); stairtActivity(intent); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 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)); } @Oviewride 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); stairtActivity(intent); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } catch (ClassNotFoundException e) { 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)); } @Oviewride 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); stairtActivity(intent); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 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)); } @Oviewride 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); stairtActivity(intent); } catch (ClassNotFoundException e) { e.printStackTrace(); } } 

    }

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.