Benim özel görünümünde (LinearLayout
türetilmiştir) boş bir işaretçi istisnası alıyorum çünkü bu onun alt görünümlerini bulamıyor. İşte Android özel bileşeni şişirilmiş değil düzen
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.");
}
}
}
düzeni (
my_view.xml
) 'dir: burada
<?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>
Ve XML dosyasında koymak nasıl edilir: İşte kod
<com.example.views.MyView
android:id="@+id/my_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Ama çalıştıklarında düzeni düzenleyicisinde önizlemek için getViewById()
null
döndürdüğünden mText.setText(...)
üzerinde bir NPE alıyorum.
Neler oluyor? Ben
MyView v = (MyView)inflater.inflate(R.layout.my_view);
((TextView)v.findViewById(R.id.text)).setText("Foo");
her şey çalışıyor yaparsanız
Açıklama
Ben bu çalışmasını bekliyoruz nedeni vardır. Bir düzen dosyasından geçtiğinde, düzen düzenleyicisinin yaptığı bu değil midir? Her durumda, her iki durumu doğru olarak nasıl ele alabilirim (iç içe geçmiş görünümler almadan)?
:
Sen kodunda XML dosyası şişirmek gerekir:
Ve böyle XML düzeni dosyasını değiştirmek İşte
değiştirmeniz gereken budurOrada bir kimliğe ihtiyacım yok. – Timmmm