Сохранить идентификатор просмотра после поворота

Мне нужно сохранить идентификатор после поворота экрана. (Андроид 3.2+). Подробности: В манифесте:

android:configChanges="orientation|screenSize"

В действии:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    initializeAnimation(true);
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        refreshView(true);
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        refreshView(false);
    }
}

Метод refreshView получает коллекцию ListView или коллекцию GridView из другого класса и помещает в ViewFlipper. Пользователь может коснуться элемента в представлении «Список» или «Сетка» и начать загрузку в AsyncTask, а на выбранном элементе отобразится индикатор выполнения.

Модель:

public List<ListView> getListViews(Context c) {
    listViews.clear();
    Iterator<List<Map<String, String>>> iter = arr.iterator();
    while (iter.hasNext()) {
        SimpleAdapter a = new SimpleAdapter(c, iter.next(), R.layout.vertical_list_view_item, new String[] { MONTH, IMAGE, DESCRIPTION}, new int[] { R.id.txtMonthV , R.id.imgV, R.id.txtDecriptionV});
        ListView lv = new ListView(c);
        lv.setDivider(null);
        lv.setDividerHeight(0);
        lv.setAdapter(a);
        listViews.add(lv);
    }
    return listViews;
}

public List<GridView> getGridViews(Context c){
    List<GridView> gridViews = new ArrayList<GridView>();
    Iterator<List<Map<String, String>>> iter = arr.iterator();
    while (iter.hasNext()) {
        SimpleAdapter a = new SimpleAdapter(c, iter.next(), R.layout.horizontal_list_view_item , new String[] { MONTH, IMAGE/*, DESCRIPTION*/}, new int[] { R.id.txtMonthH, R.id.imgH/*, R.id.txtDescriptionH*/ });
        GridView gv = new GridView(c);
        gv.setHorizontalSpacing(15);
        gv.setVerticalSpacing(15);
        gv.setNumColumns(6);
        gv.setAdapter(a);
        gridViews.add(gv);
    }

    return gridViews;       
}

Контроллер:

public View currentView;

public View getCurrentPressedView(){
    return currentView;
}

public void setCurrentPressedView(View v){
    currentView = v;
}



@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    if (arg0 instanceof ListView) {
        /*....*/
        setCurrentPressedView(arg1);
        //Start download here
    } else if (arg0 instanceof GridView) {
        /*...*/
        setCurrentPressedView(arg1);
        //Start download here
    }
}

В асинхронной задаче:

View view;
ProgressBar proBar;
@Override
    protected void onPreExecute() {
        super.onPreExecute();
        view = getCurrentPressedView();
        proBar = (ProgressBar) view.findViewById(R.id.progress);
        proBar.setVisibility(View.VISIBLE);
///.....
@Override
    protected void onProgressUpdate(Integer... values) {
        mProDialog.setProgress(values[0]);
        proBar.setVisibility(View.VISIBLE); 
        super.onProgressUpdate(values);
    }

Индикатор выполнения в vertical_list_view_item и horizontal_list_view_item имеет одинаковый идентификатор. Но когда экран был повернут, идентификатор изменился, и я не могу контролировать индикатор выполнения. Кто-нибудь может мне помочь? Спасибо


person Yuriy Aizenberg    schedule 29.11.2012    source источник


Ответы (1)


Вы использовали статическую переменную для хранения идентификатора?

person Ali Imran    schedule 29.11.2012
comment
Нет, идентификатор меняется после поворота экрана, потому что мы получаем другие представления сетки или коллекции представлений списка. - person Yuriy Aizenberg; 29.11.2012