Я пытаюсь добавить 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 и просто делать это программно (добавив текстовые просмотры один за другим программно?)? Благодарю.
'LayoutInflater.from (mContext) .inflate (R.layout.customviewbeta, this);' вы, вероятно, хотите на самом деле добавить завышенные представления в 'CustomViewBeta'. – Luksprog