8

Nie mogę wymyślić tu błędu. I może być oevrlooking pewne rzeczy ...findViewById zwraca null na liniowym widoku wewnątrz d view

Układ XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    android:orientation="vertical" > 

    <include 
     android:id="@+id/headerInclude" 
     android:layout_width="fill_parent" 
     android:layout_height="38dp" 
     android:layout_gravity="top" 
     layout="@layout/header" /> 

    <LinearLayout 
     android:id="@+id/actualView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginBottom="10dp" 
     android:layout_marginTop="10dp" 
     android:layout_weight="1" > 

     <ListView 
      android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:divider="@drawable/dotted_line" 
      android:dividerHeight="2dp" 
      android:drawSelectorOnTop="false" 
      android:paddingBottom="10dp" 
      android:paddingTop="10dp" /> 
    </LinearLayout> 

    <include 
     android:layout_width="fill_parent" 
     android:layout_height="35dp" 
     android:layout_gravity="bottom" 
     layout="@layout/footer" /> 

</LinearLayout> 

wliczony nagłówka XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/headerLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/header_bgr" 
    android:orientation="horizontal" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="7dp" > 

    <TextView 
     android:id="@+id/tvScreenTitle" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.8" 
     android:ellipsize="end" 
     android:gravity="center|left" 
     android:singleLine="true" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#ffffff" 
     android:textSize="17sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/tvScreenSubTitle" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.2" 
     android:gravity="center|right" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="#ffffff" 
     android:textSize="15sp" 
     android:textStyle="bold" /> 

</LinearLayout> 

Lista kod Java aktywny:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    appData = ((DxApp) this.getApplicationContext()).getData(); 
    setContentView(R.layout.list); 
    setTitle("Some Title..."); 
    // some more code... 
    addButtons(); 
} 

protected void addButtons() { 
    LinearLayout headerLayout = (LinearLayout) findViewById(R.id.headerLayout); 
    Button btn = new Button(this); 
    btn.setText("Go to My Sets"); 
    btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      // do some thing here... 
     } 
    }); 

    if (headerLayout != null) 
     headerLayout.addView(btn); 
} 

@Override 
public void setTitle(CharSequence title) { 
    TextView tvTitle = (TextView) findViewById(R.id.tvScreenTitle); 
    tvTitle.setText(title); 
} 

jeśli usunąć sprawdź if(headerLayout != null), otrzymam null wyjątek wskaźnika na headerLayout.addView(btn).
jestem w stanie uzyskać TextView w funkcji setTitle ale niektóre jak nie można dostać LinearLayout

Może ktoś mi pomóc w zastanawianie się, co jest nie tak z tym kodem ...

Odpowiedz

28

Jeśli ustawisz atrybut id dla include element, to będzie to identyfikator dla katalogu głównego nadpisanego układu. Zamiast szukać LinearLayout o id headerLayout poszukaj id headerInclude (lub nie ustawiaj id dla elementu include).

+3

idealny !! Wielkie dzięki Luksprog :) – sadaf

0

spróbuj tego:

View v = getlayoutInflater().inflate(((LinearLayout)findViewById(R.id.headerInclude)), null); 
TextView tvTitle = (TextView) v.findViewById(R.id.tvScreenTitle); 
Powiązane problemy