Android - ListView - executeItemClick - PullRequest
40 голосов
/ 11 ноября 2011

Я сталкиваюсь с некоторыми трудностями, когда пытаюсь использовать функцию executeItemClick ListView.

Все, что я хочу сделать, это программно выполнить щелчок в первом элементесписок.

Как я могу это сделать?Я посмотрел эту функцию в документации, но я не совсем понял ее параметры.

Я попробовал что-то вроде:

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

Но это не сработало (myListView.getChildAt(0) returns null)

Заранее спасибо!

Ответы [ 22 ]

1 голос
/ 16 августа 2017

Попробуйте это:

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;
    }
1 голос
/ 12 декабря 2015

Эта работа для меня Если вы получите странный результат при использовании getView, это потому, что нужный элемент списка не существует в видимых частях. Используйте ниже:

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

А потом,

listView.performItemClick(getViewFromAdapterByPosition(index, listView), index, 0);
1 голос
/ 24 февраля 2016

При использовании Listview (простой адаптер массива или настраиваемый адаптер) определите listview и другие, наконец, нажмите кнопку выполнения.

Например:

 //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));

Примечание: после создания setOnItemClickListener только вы должны вызвать выполнить клик. Иначе это будет не правильно.

1 голос
/ 15 апреля 2015

это может быть старый, но это может помочь:

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

ПРИМЕЧАНИЕ: первый параметр имеет значение NULL и будет работать, если у вас есть собственный адаптер, convertView будет заполнен пользовательским макетом и представлением инапример.

- веселые / счастливые кодировки.

1 голос
/ 18 марта 2015

Я только что встретил эту странную проблему сегодня, и я стараюсь изо всех сил справиться с ней.Мое условие: когда я впервые запускаю макет, мне нужно проверить какой-то элемент.Но когда я использую gridView.getChildAt (position), всегда возвращаю ноль.Я сталкивался с этой проблемой раньше, вызванной не завершением рисования макета.Поэтому я отправляю сообщение.handler.postDelayed (.., ..), работает.Спасибо, кто предложил это исключение.

0 голосов
/ 11 ноября 2011

Это с начала игр для Android.Он создает простой список элементов, по которым вы можете щелкнуть, чтобы открыть новое действие.Разумеется, каждый элемент списка также должен быть добавлен в AndroidManifest.xml как отдельное действие с именем .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();
    }
}

}

0 голосов
/ 12 июня 2017

Это работает для меня:

listview.getSelectedView().performClick();
0 голосов
/ 12 ноября 2015

Если вы получите странный результат при использовании getView, это потому, что требуемый элемент списка не существует в видимых частях. Используйте ниже:

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

А потом,

listView.performItemClick(getViewFromAdapterByPosition(index, listView), index, 0);
0 голосов
/ 03 сентября 2015

Отбрасывание опыта .

использование listview1.performItemClick также вызовет ваш listview1.OnItemClickListener, если вы используете слушатель с тем же списком в вашем коде.

Hope It helps  
0 голосов
/ 22 апреля 2013

getListView().performItemClick(null, 0, 0) сделал трюк для меня (для позиции 0).

...