8

Non riesco a capire l'errore qui. I può essere oevrlooking qualche cosa ...findViewById restituisce null su un LinearLayout all'interno di un <include> d vista

XML Disposizione:

<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> 

Incluso intestazione 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 Codice attività java:

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); 
} 

se mi tolgo la controllo if(headerLayout != null), ottengo l'eccezione puntatore null su headerLayout.addView(btn).
io sono in grado di ottenere TextView in funzione setTitle, ma in qualche modo non è possibile ottenere LinearLayout

uno può aiutare a capire ciò che è sbagliato con il codice ...

risposta

28

Se si imposta l'attributo id per la include elemento, quindi quello sarà l'id per la radice del layout gonfiato. Quindi, invece di cercare un LinearLayout con l'id headerLayout, cerca l'id headerInclude (o non impostare un id per l'elemento include).

+3

perfetto !! grazie mille Luksprog :) – sadaf

0

provare questo:

View v = getlayoutInflater().inflate(((LinearLayout)findViewById(R.id.headerInclude)), null); 
TextView tvTitle = (TextView) v.findViewById(R.id.tvScreenTitle); 
Problemi correlati