0

我有一个网格视图,我试图在其中包含大量数据,如果我尝试在 Gridview 中重用 layoutinflater,而不是重复项目,如果我尝试加载新布局,那么滚动卡住我应该在这个案子。以下是我正在使用的代码:

if (convertView == null) { // if it's not recycled, initialize some
    if (DownloadModualActivity.count_screen_normal == 1) {
        LayoutInflater li = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.magazine_container_mobile, parent,
                false);
        // v = li.inflate(R.layout.magazine_container_mobile, null);

    }
    if (DownloadModualActivity.count_screen_normal != 1) {
        LayoutInflater li = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        // v = li.inflate(R.layout.magazine_container4, null);
        v = li.inflate(R.layout.magazine_container4, parent, false);
    }

} else {
    v = (View) convertView;
}
4

2 回答 2

0

查看站点,列表视图的性能提示和模式。您可以将其应用于您的网格视图。

检查异步负载,如果您有繁重的操作,您应该加载异步任务以释放 ui 线程。

于 2013-10-29T08:51:44.097 回答
0

据我所知,您正在尝试将两个不同的视图附加到您的列表视图中。那么你需要的是那些方法。实施这些方法并重试。

@Override
public int getItemViewType(int position) {
    //  you need to return the index of your view you want to return according to your
    //  algorithm.
    return 0;
}


@Override
public int getViewTypeCount() {
    return 2;
}

在 getView() 方法中,您可以使用下面的方法。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    YourDataModel item = getItem(position);

    switch (getItemViewType(position)) {
    case 0:
        return getViewFirstItem(position, convertView, item);
    case 1:
        return getViewSecondItem(position, convertView, item);
    }

    return null;
}

在 getViewFirstItem() 和 getViewSecondItem() 内部尝试为两种不同的 View 类型实现两个不同的 getView 版本。

于 2013-10-29T09:08:34.767 回答