I want to create some TextViews (and Buttons) and than put them on the RelativeLayout within the ConstraintLayout (also could be LinearLayout or anythign else that will work)... My goal is to put for each button a textview left of it and them center that pait in the Layout. (Thats what I am trying to do with Layoutparams). But why am I getting a NullPointer Exception?
XML Layout:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/welcomeiqlinear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.william.httprequest.Welcome_InitialQuestions">
<TextView
android:id="@+id/textView14"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="16dp"
android:text="@string/wilkommen"
android:textAlignment="center"
android:textSize="35sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView28"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="24dp"
android:text="@string/wilkommen_t1"
android:textAlignment="center"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView14" />
<Button
android:id="@+id/startinitialbtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:backgroundTint="@color/aqua"
android:elevation="0dp"
android:text="@string/start_btn"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<RelativeLayout
android:id="@+id/onetimerelative"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@+id/startinitialbtn"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView28"
app:layout_constraintVertical_bias="1.0">
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
Java Code:
@Override
public void onResponse(String response) {
//Log.i(TAG, "MY_PROFILE_DATA: "+ response);
studiesList = new LinkedList<String>();
try {
JSONObject jsonObject1 = new JSONObject(response);
JSONArray jArray = jsonObject1.getJSONArray("data");
if (jArray != null) {
for (int i = 0; i < jArray.length(); i++) {
studiesList.add(jArray.getString(i));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
Iterator<String> itr=studiesList.iterator();
//Log.i(TAG,"Questionnaire_DATA: "+ studiesList.toString());
int i = 1;
while(itr.hasNext())
{
if(i==1) {
Log.i(TAG, "Questionnaire_DATA: " + itr.next());
//add textViews
TextView textView = new
TextView(getApplicationContext());
textView.setText("Fragebogen " + i);
//add buttons
Button button = new Button(getApplicationContext());
button.setText("Offen");
button.setId(i);
RelativeLayout.LayoutParams lp =
(RelativeLayout.LayoutParams)
otrelativeLayout.getLayoutParams();
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
lp.addRule(RelativeLayout.RIGHT_OF, button.getId());
lp.addRule(RelativeLayout.ALIGN_BASELINE, button.getId());
textView.setLayoutParams(lp);
otrelativeLayout.addView(button);
otrelativeLayout.addView(textView);
i++;
} else {
}
}
Error:
FATAL EXCEPTION: main
Process: com.example.william.httprequest, PID: 26073
java.lang.ClassCastException:
android.support.constraint.ConstraintLayout$LayoutParams cannot be cast to
android.widget.RelativeLayout$LayoutParams
I really would appreciate any help :)
The Android documentation for View.getLayoutParams() states that the returned layout parameters are supplied to the parent of this View.
That explains the ClassCastException
: when calling getLayoutParams()
on your RelativeLayout
, you are retrieving layout parameters that describes how it should be laid out in its parent ConstraintLayout
, hence an instance of ConstraintLayout.LayoutParams
.
You have to instantiate a new RelativeLayout.LayoutParams
for each TextView
or Button
you'd like to add as a child of your RelativeLayout
, configure its parameters, set it with View.setLayoutParams(ViewGroupe.LayoutParams)
then add the newly created View to its RelativeLayout
parent.