2015-03-24 2 views
4

Я пытаюсь добавить CustomViewBeta (расширенный RelativeLayout) в CustomViewAlpha (расширенный LinearLayout) - идея состоит в том, что CustomViewAlpha будет содержать кучу CustomViewBetas a la ListView. Независимо от того, что я пытаюсь, это не работает. Я либо ничего не вижу - не CustomViewBetas, или это дает мне NPE, когда я пытаюсь SetText на одном из TextViews внутри CustomViewBetaКак добавить пользовательский вид в другое пользовательское представление?

CustomViewAlpha работает отлично, так как это жестко закодированы в 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> 

с кодом существа:

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 не жестко закодированной в XML-фрагмент и получить добавил программно:

общественного класса Кас tomViewBeta расширяет RelativeLayout { частный Контекст 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"); 
} 

С этим XML существо:

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

Я обычно получаю удар с NPE на "textView.setText (" ASDASDASDAD ");" потому что TextView имеет значение NULL. Есть что-то, что мне не хватает? Должен ли я не пытаться раздувать XML для CustomViewBeta и просто делать это программно (добавив текстовые просмотры один за другим программно?)? Благодарю.

+1

'LayoutInflater.from (mContext) .inflate (R.layout.customviewbeta, this);' вы, вероятно, хотите на самом деле добавить завышенные представления в 'CustomViewBeta'. – Luksprog

ответ

3

ваш инициализационный неправильно

private void init() { 
    LayoutInflater.from(mContext).inflate(R.layout.customviewbeta, null, false); 
    textView = (TextView) findViewById(R.id.tripleexpandablelistview_category_name); 
    textView.setText("ASDASDASDAD"); 
} 

последний параметр должен быть true добавить TextView к RelativeLayout.Also ViewGroup, имеет метод static inflate, так что вы можете избежать LayoutInflater.from(mContext), вы можете просто позвонить inflate(mContext, R.layout.customviewbeta, this);

+1

Спасибо, что сделал. – Everett

Смежные вопросы