0

화면 회전 후 ID를 저장해야합니다. (Android 3.2 이상). Deatils : 매니페스트에서 : 활동에서회전 후 뷰 ID 유지

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에 넣어. 사용자는 List 또는 Grid보기에서 요소를 터치하고 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 
    } 
} 

: vertical_list_view_item에서

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); 
    } 

및 horizontal_list_view_item 진행 표시 줄이 동일한 ID를 가지고 있습니다. 그러나 화면이 회전하면 ID가 변경되고 진행률 막대를 제어 할 수 없습니다. 누군가 나를 도울 수 있습니까? Thx

답변

0

id를 저장하기 위해 정적 변수를 사용 했습니까?

+0

아니요, 화면 회전 후 ID가 변경됩니다. 다른 그리드보기 또는 목록보기 모음이 있기 때문에 ID가 변경됩니다. –