Это потому, что ваш адаптер ListView может иметь тысячи предметов, но ListView имеет не более десяти до двадцати прямых детей.
пытается добавить к вашему Activity.onCreate
final ArrayAdapter<String> a = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
a.add("0");
a.add("1");
final ListView lv = new ListView(this);
lv.setAdapter(a);
OnItemClickListener listener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG, "onItemClick cnt " + lv.getChildCount());
Log.d(TAG, "onItemClick first " + lv.getFirstVisiblePosition());
Log.d(TAG, "onItemClick last " + lv.getLastVisiblePosition());
a.add(Integer.toString(a.getCount()));
lv.post(new Runnable() {
@Override
public void run() {
Log.d(TAG, "run cnt " + lv.getChildCount());
Log.d(TAG, "run first " + lv.getFirstVisiblePosition());
Log.d(TAG, "run last " + lv.getLastVisiblePosition());
}
});
}
};
lv.setOnItemClickListener(listener);
setContentView(lv);
, и вы увидите, как это работает
я должен отметить, что это происходит с самого начала. И он также снова отображается на экране – JackZ
, заполнив ваш адаптер предметами hundrets и, например, в журнале регистрации кликов lv.getChildCount(), вы увидите, что хотя атрибут adapter.getCount() равен hundrets, список имеет только несколько прямых дочерних элементов , поэтому вы не можете getChildAt (adapter.getCount() - 1) – pskink
Все еще это действительно не проблема! Я также использовал ListView.getLastVisiblePosition(), и он не работает ... – JackZ