package com.reseach;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MakeRsch extends Activity {
 
 
 int qNum = 0;
 
 int getQnum(){
  return qNum;
 }
 
 void plusQnum(){
  this.qNum++;
 }
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.make_rsch);
     
     final int maxQnum = 10;
     
     final LinearLayout lr = (LinearLayout)findViewById(R.id.lr_mk);
     
     final LinearLayout lr_btn[] = new LinearLayout[maxQnum];
     final LinearLayout lr_ex[] = new LinearLayout[maxQnum];
     final EditText etQ[] = new EditText[maxQnum];
     final Button btnType[][] = new Button[maxQnum][2];
     final EditText etEx[][] = new EditText[maxQnum][4];
     final EditText etDscp[] = new EditText[maxQnum];
     
     
     findViewById(R.id.btn_addQ).setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
    int i = getQnum();
    if(i <= maxQnum){
     
     lr_btn[i] = new LinearLayout(MakeRsch.this);//inner레이아웃(버튼정렬)
     lr_btn[i].setOrientation(LinearLayout.HORIZONTAL);
     
     lr_ex[i] = new LinearLayout(MakeRsch.this);
     lr_ex[i].setOrientation(LinearLayout.VERTICAL);
     
     etQ[i] = new EditText(MakeRsch.this);//질문란
     
     btnType[i][0] = new Button(MakeRsch.this);//응답형식 선택버튼1
      btnType[i][0].setText("4지선다");
      LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
      btnParams.weight=1;
      btnType[i][0].setLayoutParams(btnParams);
      btnType[i][0].setOnClickListener(new OnClickListener() {
          public void onClick(View arg0) {
           int i = getQnum();
           
        etEx[i][0] = new EditText(MakeRsch.this); //4지선다 et
        etEx[i][1] = new EditText(MakeRsch.this);
        etEx[i][2] = new EditText(MakeRsch.this);
        etEx[i][3] = new EditText(MakeRsch.this);
        lr_ex[i].addView(etEx[i][0]);  ← 에러
        lr_ex[i].addView(etEx[i][1]);
        lr_ex[i].addView(etEx[i][2]);
        lr_ex[i].addView(etEx[i][3]);
        
        lr_ex[i].removeView(etDscp[i]);
          }
      });
      
      
     btnType[i][1] = new Button(MakeRsch.this);//응답형식 선택버튼2
      btnType[i][1].setText("서술");
      LinearLayout.LayoutParams btnParams2 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT);
      btnParams2.weight=1;
      btnType[i][1].setLayoutParams(btnParams2);
      btnType[i][1].setOnClickListener(new OnClickListener() {
       public void onClick(View arg0) {
        int i = getQnum();
        
        etDscp[i] = new EditText(MakeRsch.this); //서술 et
        
        lr_ex[i].addView(etDscp[i]);
        
        lr_ex[i].removeView(etEx[i][0]);
        lr_ex[i].removeView(etEx[i][1]);
        lr_ex[i].removeView(etEx[i][2]);
        lr_ex[i].removeView(etEx[i][3]);
       }
      });
     
      
     lr_btn[i].addView(btnType[i][0]);//inner layout에 버튼 add
     lr_btn[i].addView(btnType[i][1]);
     
     lr.addView(etQ[i]);//질문란 add
     lr.addView(lr_btn[i]);//버튼감싼layout add
     lr.addView(lr_ex[i]);
     
     plusQnum();//qnum 증가
     
    }else{
     Toast.makeText(MakeRsch.this, "더이상 추가할 수 없습니다", Toast.LENGTH_SHORT).show();
    }
   }
  });
 }
 
 
}

 

 

 02-14 14:35:36.000: E/AndroidRuntime(2627): FATAL EXCEPTION: main

02-14 14:35:36.000: E/AndroidRuntime(2627): java.lang.NullPointerException

02-14 14:35:36.000: E/AndroidRuntime(2627): at com.reseach.MakeRsch$1$1.onClick(MakeRsch.java:81)

02-14 14:35:36.000: E/AndroidRuntime(2627): at android.view.View.performClick(View.java:2408)

02-14 14:35:36.000: E/AndroidRuntime(2627): at android.view.View$PerformClick.run(View.java:8817)

02-14 14:35:36.000: E/AndroidRuntime(2627): at android.os.Handler.handleCallback(Handler.java:587)

02-14 14:35:36.000: E/AndroidRuntime(2627): at android.os.Handler.dispatchMessage(Handler.java:92)

02-14 14:35:36.000: E/AndroidRuntime(2627): at android.os.Looper.loop(Looper.java:144)

02-14 14:35:36.000: E/AndroidRuntime(2627): at android.app.ActivityThread.main(ActivityThread.java:4937)

02-14 14:35:36.000: E/AndroidRuntime(2627): at java.lang.reflect.Method.invokeNative(Native Method)

02-14 14:35:36.000: E/AndroidRuntime(2627): at java.lang.reflect.Method.invoke(Method.java:521)

02-14 14:35:36.000: E/AndroidRuntime(2627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

02-14 14:35:36.000: E/AndroidRuntime(2627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

02-14 14:35:36.000: E/AndroidRuntime(2627): at dalvik.system.NativeStart.main(Native Method)




설문조사 항목을 입력받는 액티비티인데요
버튼을 누를때마다 항목이 하나씩 늘어나서 입력받는 기능을 구현하려고했습니다.
그래서 xml을 쓰지않고 java소스만으로 배열을 이용해서 뷰를 생성해나가는걸 짜봤는데요
설문 타입이 4지선다형과 서술형으로 구분하려고 버튼으로 뷰를 추가했다가 지웠다가 하는 기능을 생각했었는데
addview 부분에서 위와같은 에러가 나요. 뭔가 설계가 잘못된거같습니다..
개발방향을 바꿔야될거같아요. 미리 질문개수와 type을 입력받는 방식으로..
그래도 일단 하려던게 안된거니까 궁금해서 질문 올려봅니다.

원래 RadioButton으로 해보려고했는데 RadioGroup과 RadioButton을 java소스만으로 연결하는 방법을 몰라서 그냥 Button으로 해봤어요.
xml을 이용하면 좀 더 편할거같은데.. 제가 생각하는 기능을 xml을 활용해서 만들 수 있는건가요?
전에도 이런거 만들다가 개발방향을 바꾼적이 있어서요. (xml로 다 만들어놓고 버튼으로 visible false / true 바꿔주는 방식 ㅜㅜ)
이런식의 액티비티는 어떻게 만드는게 효율적인지 궁금합니다~ 

공지사항을 다 읽었음.