微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Android ListView中,我如何迭代/操纵所有子视图,而不仅仅是可见视图?

下面的代码不会更改所有ListView行的文本,因为getChildCount()不会获取所有ListView的行,而只会获取可见的行.

for (int i = 0; i < listView.getChildCount(); i++)
{
    View v = listView.getChildAt(i);
    TextView tx = (TextView) v.findViewById(R.id.mytext);
    tx.setTextSize(newTextSize);
}

所以我该怎么做?

当ListView的行变得可见时是否有用于获取通知代码,因此我可以设置其文本大小?

解决方法:

来自API Demos的List13使用OnScrollStateChanged执行类似操作.但是,可能有更好的方法

public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
    case OnScrollListener.SCROLL_STATE_IDLE:
        mBusy = false;

        int first = view.getFirstVisiblePosition();
        int count = view.getChildCount();
        for (int i=0; i<count; i++) {
            TextView t = (TextView)view.getChildAt(i);
            if (t.getTag() != null) {
                t.setText(mStrings[first + i]);
                t.setTag(null);
            }
        }

        mStatus.setText("Idle");
        break;

.
.
.

由Corey Trager编辑:

以上肯定指出了我正确的方向.我发现处理OnScrollListener.onScroll比onScrollStateChanged工作得更好.即使我在onScrollSgtaetChanged中删除了case语句并处理了每个状态更改,一些文本也没有调整大小.但是使用onScroll,事情似乎有效.

所以,我看似工作的代码看起来像这样:

public void onScroll(AbsListView v, int firstVisibleItem, int visibleCount, int totalItemCount)
{
    ListView lv = this.getListView();
    int childCount = lv.getChildCount();

    for (int i = 0; i < childCount; i++)
    {
        View v = lv.getChildAt(i);
        TextView tx = (TextView) v.findViewById(R.id.mytext);
        tx.setTextSize(textSize);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐