Android网格视图以相反的顺序加载

时间:2011-06-08 11:09:56

标签: android gridview

每当我改变手机的方向时,我都会看到网格视图中的项目顺序相反,即第一个位置的内容现在结束,依此类推。

如何摆脱这个问题?根据点击的位置,我正在调用不同的活动。但由于订单发生变化,因此在更改屏幕方向时会调用错误的活动。

我在清单文件中添加了android:configChanges="orientation|keyboardHidden"

感谢任何帮助。

适配器类:

class ImageAdapter extends BaseAdapter {

    Context mContext;

    private String[] mHome_icon_text = { "A", "B",
            "C", "D", "E","F" };

    private Integer[] mHome_icon_image = { R.drawable.icon,
            R.drawable.icon, R.drawable.icon, R.drawable.icon,
            R.drawable.icon, R.drawable.icon, };

    public ImageAdapter(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mHome_icon_text.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    @Override
    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.home_grid_view_item, null);
            TextView tv = (TextView) v.findViewById(R.id.home_icon_text);
            tv.setText(mHome_icon_text[position]);
            ImageView iv = (ImageView) v.findViewById(R.id.home_icon_image);

            iv.setImageResource(mHome_icon_image[position]);

        } else {
            v = convertView;
        }
        return v;
    }
}

在主要课程中:

grid_main.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v,
            int position, long id) {
        Intent i;
        switch (position) {
        case 0:
            // start A
            i = new Intent(Home.this,
                    com.da.A.class);
            startActivity(i);
            break;

        case 3: //Cactivity
            i = new Intent(Home.this,
                    com.da.C.class);
            startActivity(i);
            break;
        default:
            Toast
                    .makeText(Home.this, "" + position,
                            Toast.LENGTH_SHORT).show();
        }

    }
});

1 个答案:

答案 0 :(得分:7)

v = convertView看起来很可疑。我认为您需要使用该位置所需的图像和文本更新视图。 (否则,您只需重新使用缓存视图,当重建网格时,可能会以错误的顺序将其提供给您。)

1)作为测试,尝试使用if (convertView == null) {分支即使它不为空,看看是否修复了它。 (这会在滚动或旋转时不必要地增加新视图,所以不要这样离开。)

2)如果确实解决了这个问题,您可以通过在其中找到convertView等内容来正确回收之前虚增的R.id.home_icon_text,并为position中的convertView != null更新{{1}} 1}}分支。