android에서 Master Detail Flow 템플릿을 사용하고 있습니다. 응용 프로그램이 시작될 때 목록에있는 항목에 프로그래밍 방식으로 액세스하여 글꼴 크기와 TextViews의 색상을 설정하려고합니다. onResume (ItemListActivity 또는 ItemListFragment)을 코딩하면 ListView는 null이 아니지만 ListView의 자식 인 3 개의 TextViews는 null입니다.TextView null in Master Detail Flow 템플릿
public void updateActivity()
{
ViewGroup leftPane = (ViewGroup) findViewById(R.id.item_list);
FrameLayout frameLayout = (FrameLayout) leftPane.getChildAt(0);
FrameLayout frameLayout2 = (FrameLayout) frameLayout.getChildAt(1);
ListView listView = (ListView) frameLayout2.getChildAt(1); // listView NOT null
TextView item0 = (TextView) listView.getChildAt(0); // item0 is NULL !!!!!
}
은 내가 (더러운)로 ItemListActivity 내부 코드 수정 함께했다, 그리고 그것이 독립적 인 장치에 모든 시간을 일하는 것이 될 것입니다 확실하지 않다 : 작동
public View onCreateView(String name, Context context, AttributeSet attrs)
{
// started is an int instance variable, initialized at 0
Log.w("MA", "Inside Activity:onCreateView, started = " + started);
// if started <= 40 ==> item0 is NULL inside updateActivity
if(started == 41) // ==> item0 NOT null inside updateActivity
updateActivity();
started++;
return super.onCreateView(name, context, attrs);
}
을하지만 (훨씬) 더 나은 해결책을 찾고 있습니다. LogCat의 결과는 다음과 같습니다 (48시에 멈춤) :
다양한 라이프 사이클 메소드가 인터리브 된 일부 실행이있는 것으로 보입니다. 메서드가 실행되기 전에 모든 뷰가 인스턴스화되었다는 것을 보증하는 메서드 내부를 코딩하는 방법이 있어야합니다. Activity, FragmentActivity, ListFragment 및 Fragment 클래스에서 많은 메서드를 재정의하려고했습니다. 지금까지 행운이 없으면, TextViews (ListView의 자식)는 모든 메서드 내에서 NULL입니다. 그건 그렇고, 다른 TextViews는 시작 41이 같을 때 여전히 NULL입니다. 두 번째 것은 시작 43 일 때 NOT NULL이되고, 시작된 45 일 때 세 번째 것은 NOT NULL이됩니다. 아이디어가 있습니까? 어떤 도움을 주셔서 감사합니다.
......
05-16 19:27:36.460: W/MA(3155): Inside Activity:onCreateView, started = 37
05-16 19:27:36.460: W/MA(3155): Inside Activity:onCreateView, started = 38
05-16 19:27:36.460: W/MA(3155): Inside ItemListActivity:onResume
05-16 19:27:36.460: W/MA(3155): Inside ItemListFragment:onResume
05-16 19:27:36.484: W/MA(3155): Inside Activity:onCreateView, started = 39
05-16 19:27:36.484: W/MA(3155): Inside Activity:onCreateView, started = 40
05-16 19:27:36.632: W/MA(3155): Inside Activity:onCreateView, started = 41
05-16 19:27:36.632: W/MA(3155): Inside checkActivity
05-16 19:27:36.632: W/MA(3155): Inside Activity:onCreateView, started = 42
05-16 19:27:36.640: W/MA(3155): Inside Activity:onCreateView, started = 43
05-16 19:27:36.640: W/MA(3155): Inside Activity:onCreateView, started = 44
05-16 19:27:36.648: W/MA(3155): Inside Activity:onCreateView, started = 45
05-16 19:27:36.656: W/MA(3155): Inside Activity:onCreateView, started = 46
05-16 19:27:36.742: W/MA(3155): Inside Activity:onCreateView, started = 47
05-16 19:27:36.742: W/MA(3155): Inside Activity:onCreateView, started = 48
제안 된 답변을 시도하지는 않았지만 작동하면 놀라실 것입니다.이 TextViews에는 ID가 없으므로 findViewById를 사용하여 액세스 할 수 있다고 생각하지 않습니다. – user2391956
layout.xml에 android : id를 추가하면 제대로 작동합니다. – Ankit
TextViews는 xml 레이아웃에 나열되어 있지 않으므로 (거기에 ID를 부여 할 수 없습니다); TextViews의 수는 동적이며 XML 레이아웃에 하드 코딩하지 않으려합니다. 이 경우 – user2391956