2012-12-07 2 views
0

다음 예제에서 View 클래스의 변수를 두는 데 가장 적합한 두 가지 선택 항목 중 무엇입니까? 이 안드로이드 앱 코드에서 액티비티를 확장하는 클래스의 글로벌 변수로 배치하는 것이 더 좋습니까? 아니면 BaseAdapter를 확장하는 ImageAdapter라는 중첩 된 내부 클래스의 내부에 변수를 선언하는 것이 더 낫습니까?중첩 된 내부 클래스에 대한 변수를 둘 수있는 위치, android

어느 것이 더 낫습니까?

2 개의 코드 샘플이 아래에 나와 있습니다.

은 첫 번째 샘플에서 View 클래스의 view 변수가 범위에서 더 전역으로 선언되는 위치입니다. 여기에 표시된 것처럼 Main 클래스에 나타납니다. 이 제 2 실시보기보기

public class Main extends Activity { 
    View view; // <--- PLACEMENT IN A MORE GLOBAL POSITION 
    Cursor imageCursor; 

public class ImageAdapter extends BaseAdapter { 

    private Context context; 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView == null){ 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.adapterview, null); 
     }else{ 
      view = convertView; 
     } 

그 클래스의 getView 방법의 내부 ImageAdapter 클래스의 로컬 변수로 선언되어있다.

public class Main extends Activity { 
Cursor imageCursor; 

public class ImageAdapter extends BaseAdapter { 

    private Context context; 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view; // <--- PLACEMENT AS LOCAL VARIABLE 
     if(convertView == null){ 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.adapterview, null); 
     }else{ 
      view = convertView; 
     } 

답변

0

view 멤버 필드를 만들 이유가 없습니다. 메서드의 로컬 사용은 메서드의 로컬 변수이므로 사용하십시오.

실제로이 용도로는보기를 클래스의 다른 코드에 표시하고 싶지는 않습니다. 프레임 워크 (getView)로 반환 된 다음 코드에 의해 혼자 남겨졌습니다. 실수로 getView에서 반환 한보기의 대역 외 변경을 수행하면 예기치 않은 동작이 발생합니다.

+0

예, 모든 상황에서 최대한 범위를 제한하는 것이 가장 바람직하다고 가정합니다. 해당 변수에 필요한만큼의 범위 만 허용합니다. – Kevik

+0

@Kevik - 예, 좋은 경험입니다. –