Ricevo un'eccezione di puntatore nullo nella mia vista personalizzata (che deriva da un LinearLayout
) perché non riesce a trovare le sue viste secondarie. Ecco il codice:Layout non gonfiato nel componente personalizzato Android
public class MyView extends LinearLayout
{
public MyView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public MyView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
private TextView mText;
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
mText = (TextView) findViewById(R.id.text);
if (isInEditMode())
{
mText.setText("Some example text.");
}
}
}
Ecco il layout (my_view.xml
):
<?xml version="1.0" encoding="utf-8"?>
<com.example.views.MyView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:ellipsize="end"
android:maxLines="4"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="Some text" />
</com.example.views.MyView>
ed ecco come l'ho messo nel file XML:
<com.example.views.MyView
android:id="@+id/my_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Ma quando provo per visualizzarlo in anteprima nell'editor di layout, ottengo un NPE su mText.setText(...)
perché getViewById()
restituisce null
.
Cosa sta succedendo?
Chiarimento
La ragione per cui mi aspetto che questo lavoro, è se faccio
MyView v = (MyView)inflater.inflate(R.layout.my_view);
((TextView)v.findViewById(R.id.text)).setText("Foo");
tutto funziona bene. Non è questo ciò che fa il gonfiaggio del layout quando attraversa un file di layout? In ogni caso, come posso gestire entrambe le situazioni correttamente (senza ottenere viste nidificate inutili)?
Dove si trova ' 'a e perché non è la tua istruzione 'android: id' dove la dichiari prima nel layout? –
codeMagic
Non ho bisogno di un id lì. – Timmmm