활동에서 조각이 생성되었을 때 null을 반환하는 getView
현재 휴대폰에서도 작업을 시도중인 태블릿 응용 프로그램이 있습니다. 테이블에는 목록 조각과 세부 정보 조각이라는 두 개의 조각이 화면에 있습니다. 전화기에서 목록 조각이 나타나고 목록 항목을 누르면 새 활동이 생성됩니다. 이 활동은 단순히 onCreate()
메서드 에서 조각을 만들고 다음과 같이 화면에 커밋합니다.
// Place an DeallDetailsFragment as our content pane
DealDetailsFragment f = new DealDetailsFragment();
getFragmentManager().beginTransaction().add(android.R.id.content, f).commit();
getFragmentManager().executePendingTransactions();
이것은 예상대로 작동하지만이 활동 내에서로드 및 표시 할 세부 정보를 조각에 알려야합니다. 내 DealDetailsFragment 클래스에는 updateDeal()
다음과 같이 콘텐츠를 업데이트 하는 메서드가 있습니다.
if (deal==null) { // could be null if user presses the loading deals list item before it loads
return;
}
this.deal=deal;
if (dealTitle==null) { // get the view objects only once
holder = new ViewHolder();
holder.dealHeat=(TextView) getView().findViewById(R.id.dealDetails_heat_textView);
holder.dealPrice=(TextView) getView().findViewById(R.id.dealDetails_price_textView);
holder.dealRetailer=(TextView) getView().findViewById(R.id.dealDetails_retailer_textView);
holder.dealTitle=(TextView) getView().findViewById(R.id.dealDetails_title_textView);
holder.dealDesc=(TextView) getView().findViewById(R.id.dealDetails_desc_textView);
holder.goToButton= (LinearLayout) getView().findViewById(R.id.dealDetails_goToDeal);
holder.dealImage=(ImageView) getView().findViewById(R.id.dealDetails_imageView);
holder.postedBy=(TextView) getView().findViewById(R.id.dealDetails_poster_textView);
holder.datePosted=(TextView) getView().findViewById(R.id.dealDetails_date_textView);
getView()
응용 프로그램이 단일 조각 만 표시된 전화에서 실행될 때 null을 반환합니다.
어떤 아이디어? 불행히도 온라인에서 사용할 수있는 조각 예제가 많지 않습니다.
동안 실행될 메서드 호출을 이동 onCreateView
하고 대신 참조를 위해 팽창중인 뷰를 사용합니다 getView()
. 자세한 내용은 조각 수명주기를 참조하세요. https://developer.android.com/guide/components/fragments.html#Creating
그리고 그 문서는 getView()
반환하기 전에 null을 onCreateView(LayoutInflater, ViewGroup, Bundle)
반환하는 이유를 설명 합니다.
getView () 제공 되는 경우 조각의 레이아웃 (onCreateView (LayoutInflater, ViewGroup, Bundle)에서 반환 된 것 )에 대한 루트 뷰를 가져옵니다.
https://developer.android.com/reference/android/app/Fragment.html#getView ()
메서드를로 이동 onCreateView()
해도 도움이되지 않았습니다. 전역 변수 만들기mView
protected View mView;
그리고 onCreateView ()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "oncreateView");
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.activity_secure_cloud_drive_folder, container, false);
this.mView = view;
return view;
}
그리고 당신의 교체 getView()
와 함께mView
onViewCreated()
재정의해야하는 -method 안에 코드를 넣어서 수정할 수 있습니다 . 전화 super()
하는 것을 잊지 마십시오 .
onAttach (...) 함수에서 null 인 이유를 이해하려면 Android Lifecycle을 확인해야합니다.
프래그먼트가 추가 될 때 호출되는 첫 번째 함수는 onAttach () 이지만 실제로는 뷰가 생성되지 않았습니다. 이것이이 호출 내에서 액세스하려고 할 때 null이 반환되는 이유입니다.
다음 함수는 onCreate ()입니다 ...하지만 아직 생성 된 뷰가 없습니다 !!!!
호출 된 세 번째 함수는 onCreateView () 이며 여기에서이 프래그먼트에 연결된 뷰를 나타내야합니다 .... 그리고 뷰 객체가 존재하고 액세스 할 수있는이 호출에서만 가능합니다.
여기 에서 전체 수명주기를 읽고 알아보십시오 .
인사말
onCreateView ()는 onCreateView () 전에 호출되기 때문에 onCreateView ()에서 뷰를 확장하든 그렇지 않든 상관없이 onCreate ()에서 getView ()를 통해 아무것도 얻지 못합니다. 그 당시에는 onCreate ()가 아직 호출되지 않았기 때문입니다. .
getview()
뷰가 팽창되기 전에 호출 하기 때문에 기본적으로 null이됩니다 . 크리에이트 View
개체를하고 사용하여 입력 inflater
한 후 아래에 UI 요소를 참조 코드를 찾을 수
View view = inflater.inflate(R.layout.fragment_albumslist, container, false);
TextView t= (TextView)view.findViewById(R.id.txtTest);
t.setText(strtext);
return view;
'program story' 카테고리의 다른 글
omniauth facebook 로그인을 팝업으로 전환 (0) | 2020.12.10 |
---|---|
jQuery는 한 클래스를 다른 클래스로 바꿉니다. (0) | 2020.12.10 |
Postman으로 NTLM 통과 (0) | 2020.12.10 |
React가있는 ESLint는`no-unused-vars` 오류를 제공합니다. (0) | 2020.12.10 |
Mac에서 Dot을 여는 방법 (0) | 2020.12.10 |