2017-12-25 24 views
0

TextViews(およびボタン)をいくつか作成し、ConstraintLayout内のRelativeLayoutに配置する(LinearLayoutやその他の作業が可能)... 私の目標は、各ボタンの左にテキストビューを置くことです。 (それは私がLayoutparamsでやろうとしていることです)。 しかし、なぜNullPointer例外が発生していますか?プログラムでTextViewを追加してレイアウト内に配置する方法

XMLレイアウト:

<?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コード:

@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 { 





       } 
      } 

エラー:

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 

私は本当に任意の助けをいただければ幸いです:)

+0

あなたが提示したエラーが「ClassCastException」を取得しているときに、なぜあなたが 'NullPointerException'を取得していると言っていますか? –

答えて

0

のためのAndroidのドキュメントは、返されたレイアウトパラメータが、このビューのに供給されると述べています。 これはClassCastExceptionについて説明しています。RelativeLayoutgetLayoutParams()を呼び出すと、それを親のConstraintLayoutに配置する方法を記述するレイアウトパラメータが取得されます。したがって、ConstraintLayout.LayoutParamsというインスタンスがあります。

あなたは、そのRelativeLayout親に新しく作成されたビューを追加し、あなたのRelativeLayoutの子として追加し、そのパラメータを設定し、View.setLayoutParams(ViewGroupe.LayoutParams)でそれを設定したい各TextViewButtonのための新しいRelativeLayout.LayoutParamsをインスタンス化する必要があります。

関連する問題