Вид сетки Android загружается в обратном порядке - PullRequest
4 голосов
/ 08 июня 2011

Всякий раз, когда я меняю ориентацию телефона, я вижу, что порядок элементов в виде сетки меняется на противоположный, то есть то, что было в первой позиции, теперь приходит в конец и т. Д.

Как мне избавиться от этой проблемы? Основываясь на выбранной позиции, я использую различные виды деятельности. Но поскольку порядок меняется, при изменении ориентации экрана вызываются неправильные действия.

Я добавил 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 Ответ

7 голосов
/ 08 июня 2011

Это v = convertView выглядит подозрительно. Я думаю, что вам нужно обновить вид с требуемым изображением и текстом для этой позиции. (В противном случае вы просто повторно используете кэшированное представление, которое может быть передано вам в неправильном порядке при перестроении сетки.)

1) В качестве теста попробуйте взять ветку if (convertView == null) {, даже если она не равна нулю, и посмотрите, исправляет ли это. (Это излишне раздувает новые виды при прокрутке или повороте, поэтому не оставляйте это так.)

2) Если это все исправит, вы можете правильно переработать ранее надутый convertView, найдя в нем R.id.home_icon_text и т. Д., И обновив его до текущего position в ветви convertView != null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...