2013-05-16 4 views
0

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 

답변

0

사용자 지정 어댑터를 구현해야합니다. 활동 중 onCreate에서 CustomAdapter의 객체를 만들고 에 list of data을 전달합니다. CustomAdapter 내부

당신은 u는 데이터 setFont()textViewsetColor()textView()에 대한 findViewById(id)) 및 기반을 호출해야 (여기 요) 각 행에 대해 그 팽창 레이아웃 getView()를 재정의해야합니다.

+0

제안 된 답변을 시도하지는 않았지만 작동하면 놀라실 것입니다.이 TextViews에는 ID가 없으므로 findViewById를 사용하여 액세스 할 수 있다고 생각하지 않습니다. – user2391956

+0

layout.xml에 android : id를 추가하면 제대로 작동합니다. – Ankit

+0

TextViews는 xml 레이아웃에 나열되어 있지 않으므로 (거기에 ID를 부여 할 수 없습니다); TextViews의 수는 동적이며 XML 레이아웃에 하드 코딩하지 않으려합니다. 이 경우 – user2391956

관련 문제