1

gridview 크기와 열 너비를 기반으로 뷰를 설정하는 gridview가 있습니다. 시작할 때 모든 것이 잘되지만 방향을 변경하면 뷰가 다시 생성됩니다. 확인 된 체크 상자가 새로 고쳐 지므로 원하는 것은 아닙니다. 스크롤 한 상태와 확인란 상태를 유지해야합니다. 여기 안드로이드 gridview는 방향을 바꿀 때 상태를 유지하지만 뷰를 업데이트해야합니다.

은의 getView 내 코드입니다 : configChanges는 = "오리엔테이션"이 추가 그리드

답변

0

내보기를 업데이트하지 않습니다 항목에서의 활동에 불어 : 나는 안드로이드를 설정하면

public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.galleryitem, null); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      ImageItem item = images.get(position); 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 
        if (images.get(id).selection) { 
         cb.setChecked(false); 
         images.get(id).selection = false; 
        } else { 
         cb.setChecked(true); 
         images.get(id).selection = true; 
        } 
       } 
      }); 
      holder.imageview.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        int id = v.getId(); 
        ImageItem item = images.get(id); 
        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_VIEW); 
        final String[] columns = { MediaStore.Images.Media.DATA }; 
        Cursor imagecursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
          columns, MediaStore.Images.Media._ID + " = " + item.id, null, MediaStore.Images.Media._ID); 
        if (imagecursor != null && imagecursor.getCount() > 0) { 
         imagecursor.moveToPosition(0); 
         String path = imagecursor.getString(imagecursor 
           .getColumnIndexOrThrow(MediaStore.Images.Media.DATA)); 
         File file = new File(path); 
         imagecursor.close(); 
         intent.setDataAndType(Uri.fromFile(file), "image/*"); 
         startActivityForResult(intent, VIEW_IMAGE); 
        } 
       } 
      }); 
      // holder.imageview.setImageBitmap(item.img); 
      holder.imageview.setLayoutParams(mImageViewLayoutParams); 

      // Check the height matches our calculated column width 
      if (holder.imageview.getLayoutParams().height != mItemHeight) { 
       holder.imageview.setLayoutParams(mImageViewLayoutParams); 
      } 
      bitmapFromId.DisplayImage(item.id, holder.imageview); 
      // holder.imageview.setImageBitmap(item.img); 
      holder.checkbox.setChecked(item.selection); 
      return convertView; 
     } 

AndroidManifest.xml에

android:configChanges="orientation|screenSize|keyboardHidden" 
+0

. 나는 오리엔테이션 변경에 대한 뷰를 업데이트 할 필요가있다 – sukarno

+0

매번 내가 설정 변경 방향을 볼 때마다 나는 게으름 때문에 -1을 준다. – Necronet

0

는 매니페스트

<activity 
      android:name=".Your_Activity" 
      android:configChanges="keyboardHidden|orientation" > 
이 추가

그리고 당신은 설정 변경하기 전에 상태를 유지하고 변경있어 후 복원 할 수 있습니다 Window.onOrientationChange

0

에서 자바 코드에서보기를 업데이트하여 변경 사항을 확인하십시오. 아래에 표시된 것과 비슷한 것을 할 수 있습니다.

/* 
* (non-Javadoc) 
* 
* @see android.app.Activity#onRestoreInstanceState(android.os.Bundle) 
*/ 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    int scrollTo = savedInstanceState.getInt("firstItem"); 
    gridView.setSelection(scrollTo); 
    setSelectedItem(savedInstanceState.getInt("selectedItem"));//A method to set the selected Item 
} 


/* (non-Javadoc) 
* @see android.app.Activity#onSaveInstanceState(android.os.Bundle) 
*/ 
@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    int scrollTo = gridView.getFirstVisiblePosition(); 
    outState.putInt("firstItem", scrollTo); 
    int selectedItem = getSelectedImageItem();//A method to retrieve the selected item from the adapter 
    outState.putInt("selectedItem", selectedItem); 
    /*additionally you can pass the entire collection into the bundle and retrieve it as well 
    using android.app.Activity#onRetainNonConfigurationInstance*/ 
} 

자세한 내용은 아래 링크를 참조하십시오. 장기적으로 도움이 될 것입니다. configChanges는 = "오리엔테이션"는 그리드 내보기를 업데이트하지 않습니다 : 내가 안드로이드를 설정하면

Handling Runtime config changes