2014-10-18 2 views
0

뭐죠 두 코드 사이의 디퍼 런스 세라마이드 :위젯 선언. onCreateView 내부 또는 외부?

EditText mTitleField; 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_crime, parent, false); 
     mTitleField = (EditText)v.findViewById(R.id.crime_title); 
} 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_crime, parent, false); 
     EditText mTitleField = (EditText)v.findViewById(R.id.crime_title); 
} 

첫번째는 onCreateView 외부 선언 EDITTEXT 변수, 두번째는 onCreateView 내부 선언을 가지고있다. 어디에서 신고해야할까요?

답변

0

예. 중요합니다. 첫 번째 시나리오의 경우 mTitleField를 다른 메서드와 함께 사용할 수도 있습니다 (다른 메서드에 대해서는 별도로 설명해야 함). 두 번째 시나리오에서는 bot이 onCreateView() 내에서 mTitleField를 선언하고 인스턴스화 했으므로 해당 메서드 내에서만 액세스 할 수 있습니다.

이것은 Java의 전역 변수 및 지역 변수의 기본 개념입니다.

0

물론 문제가되는 경우는 처음으로 mTitleField이 인 전세계 으로 선언됩니다. 이 경우 특정 클래스의 다른 메소드에서 mTitleFieldEditText으로 액세스 할 수 있습니다.

예는 : 어떤 버튼의 클릭에 가정 당신은 당신이 단순히 로컬로 선언 된 두 번째 경우 mTitleField에서이

String someString = mTitleField.getText().toString(); 

같이 할 수있는 텍스트가 EditText에 입력해야합니다. 이 경우 onCreateView(...) 외부에서는 mTitleField에 액세스 할 수 없습니다. mTitleField의 범위는 onCreateView(...)입니다.

예 : 다음이

EditText mTitleField = (EditText)v.findViewById(R.id.crime_title); 
String someString = mTitleField.getText().toString(); 
0

차이 같은 것을 EditText 다시 onClick 내부 방법은 첫 번째 방법에서는 전 세계적으로 선언 된 것입니다 선언해야 당신이 EditText에 입력 한 텍스트를 필요한 모든 버튼의 클릭에 가정 그래서 전역 변수를 전체 활동의 어느 곳에서나 사용할 수 있다는 이점이 있습니다. 두 번째 방법에서는 활동의 특정 위치에 사용할 수있는 지역 변수로 사용됩니다.

로컬 변수는 블록 범위 내에서 정의됩니다.

전역 변수는 여러 범위에서 액세스 할 수있는 변수입니다.

관련 문제