滚动向下和向上时,我的Gridview项目位置发生变化

时间:2012-12-01 19:26:27

标签: android android-layout android-gridview

活动开始时我的GridView看似正确

http://i.stack.imgur.com/p41lb.jpg

但向下滚动项目位置更改后

enter image description here

我在第一行的最后一项有一个大文本,我认为这是我的问题 这是我的getView()代码

public View getView(int position, View convertView, ViewGroup parent) {
    View v;
    if (convertView == null) {
        LayoutInflater li = getLayoutInflater();
        v= li.inflate(R.layout.item, null);
    } else {
    v= convertView;
    }
    ImageView imageView = (ImageView) v.findViewById(R.id.grid_item_image);
    imageView.setImageResource(R.drawable.logo);
    TextView textView = (TextView) v.findViewById(R.id.grid_item_label);
    textView.setText(PersianReshape.reshape( Values[position].getName()));
    Typeface face = Typeface.createFromAsset(context.getAssets(),"font/BNazanin.ttf");
    textView.setTypeface(face);
    textView.setTextSize(farin.code.rahnamee.attrib.attribute.content_font_size);
    return gridView;
}

2 个答案:

答案 0 :(得分:1)

您的网格项目应该都具有统一的高度。考虑设置最小/最大文本行数以确保高度均匀,并确保ImageView也具有一致的大小。一种方法是使用ImageView的已知固定大小,而不仅仅是wrap_content

答案 1 :(得分:0)

你应该改变你的getView方法。

public View getView(int position, View convertView, ViewGroup parent){
    // TODO Auto-generated method stub
    View v;
    if(convertView==null)
    {
        LayoutInflater li = getLayoutInflater();
        v = li.inflate(R.layout.icontext, null);
    }else{
        v = convertView;
    }
    TextView tv = (TextView)v.findViewById(R.id.icon_text);
    tv.setText(providers[position]);
    ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
    iv.setImageResource(R.drawable.icon);

    return v;
}

您的问题是,当您使用convertView时,它会将旧数据存储在第一个记录中。转换视图用于避免资源的布局膨胀,这会花费您的时间和内存。您应该使用旧的膨胀视图,但设置新数据。