¿Cómo agregar una vista personalizada dentro de otra vista personalizada?
Estoy intentando agregar CustomViewBeta (un RelativeLayout extendido) a CustomViewAlpha (un LinearLayout extendido) – la idea que es que el CustomViewAlpha llevará a cabo un manojo de CustomViewBetas a la un ListView. No importa lo que intente, no funciona. Yo no veo nada – no CustomViewBetas, o me da un NPE cuando intento setText en uno de los TextViews dentro de la CustomViewBeta
CustomViewAlpha funciona bien ya que está codificado en el XML del Fragmento:
- Cómo llamar a los colores de los recursos de forma dinámica en Android?
- La imagen VectorDrawable se pixeliza
- Android: asignar un valor constante a un elemento xml
- Android Studio: Problemas de renderización
- ¿Definir el logotipo personalizado para ActionBar (diferente de Logo) en XML?
<?xml version="1.0" encoding="utf-8"?> <FrameLayout ...> <com.path.CustomViewAlpha android:id="@+id/customviewalpha" android:orientation="vertical" android:layout_gravity="center_vertical" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout>
Con el código siendo:
public class CustomViewAlpha extends LinearLayout { private Context mContext; public CustomViewAlpha (Context context) { super(context); this.mContext = context; } public CustomViewAlpha (Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; } public CustomViewAlpha (Context context, AttributeSet attrs, int defStyle){ super(context, attrs,defStyle); this.mContext = context; } public void addCustomViewBeta(String someString){ CustomViewBeta customViewBeta = new CustomViewBeta(mContext); addView(customViewBeta); }
CustomViewBeta no está codificado en el XML del fragmento y se agrega mediante programación:
Public class CustomViewBeta extends RelativeLayout {contexto privado mContext;
private TextView textView; public CustomViewBeta (Context context) { super(context); this.mContext = context; init(); } public CustomViewBeta (Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; init(); } public CustomViewBeta (Context context, AttributeSet attrs, int defStyle){ super(context, attrs,defStyle); this.mContext = context; init(); } private void init() { LayoutInflater.from(mContext).inflate(R.layout.customviewbeta, null, false); textView = (TextView) findViewById(R.id.tripleexpandablelistview_category_name); textView.setText("ASDASDASDAD"); }
Con este XML siendo:
<?xml version="1.0" encoding="utf-8"?> <com.path.CustomViewBeta xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/customviewbeta_textview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </com.path.CustomViewBeta>
Normalmente me golpean con un NPE en el "textView.setText (" ASDASDASDAD ");" Porque el TextView es nulo. ¿Hay algo que me falta? ¿No debo intentar inflar un XML para el CustomViewBeta y apenas lo hago programmatically (que agrega los textviews uno por uno programmatically?)? Gracias.
- La vista personalizada no aparece
- Cambiar el tamaño del mapa de bits dentro de una lista de capas
- Android error en tutorial no puede encontrar la variable de símbolo activity_display_message
- Pantalla de bienvenida de Android
- RadioGroup checkedButton propiedad
- Implementación de la paginación en formato de libro HTML
- Cambiar el color de la barra de navegación, Android
- Cómo asignar una lista de lista a RecyclerView
Tu init esta mal
private void init() { LayoutInflater.from(mContext).inflate(R.layout.customviewbeta, null, false); textView = (TextView) findViewById(R.id.tripleexpandablelistview_category_name); textView.setText("ASDASDASDAD"); }
El último parámetro tiene que ser true
para agregar el TextView
al RelativeLayout.Also ViewGroup
, tiene un método static inflate
ViewGroup
, por lo que puede evitar LayoutInflater.from(mContext)
, puede simplemente llamar inflate(mContext, R.layout.customviewbeta, this);
- ChrisBanes PullToRefresh 'Cargando …' issue
- Enviar notificación push de un dispositivo Android a otro Uso de GCM