2014-01-18 173 views
0

我已經動態創建微調和按鈕使用佈局充氣器。當我嘗試用按鈕點擊刪除這些,我得到空指針異常錯誤,當我運行it.Here程序只是崩潰是我的代碼:Android刪除動態創建的微調和按鈕,點擊一個按鈕

public class MainActivity extends FragmentActivity implements OnClickListener{ 
SampleAlarmReceiver alarm = new SampleAlarmReceiver(); 
static EditText startTime; 
static EditText endTime; 
static EditText startDate; 
static EditText EndDate; 
View buttonRem; 
Spinner spinnerNew; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    startTime = (EditText)findViewById(R.id.EditTextST); 
    startDate = (EditText)findViewById(R.id.editTextSD); 

    //Set up Click Listener for all Buttons 
    View buttonAdd = findViewById(R.id.button1); 
    buttonAdd.setOnClickListener(this); 
      buttonRem = findViewById(R.id.buttonRem); 
    buttonRem.setOnClickListener(this); 

} 

public void onClick(View v) 
{ 
    switch(v.getId()){ 
    case (R.id.button1): 

     RelativeLayout rootLayout = (RelativeLayout)findViewById(R.id.main_layout); 

     //use layout inflater to create 'spinnerNew' on the fly 
     final LayoutInflater spnInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     spinnerNew = (Spinner)spnInflater.inflate(R.layout.extra_spinner, null); 
     rootLayout.addView(spinnerNew); 

     //move the dynamic spinner to different position 
     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)spinnerNew.getLayoutParams(); 
     params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     params.addRule(RelativeLayout.BELOW, R.id.spinner1); 

     spinnerNew.setLayoutParams(params); //causes layout update 

     //use layout inflater to create 'remove button' on the fly 
     final LayoutInflater btnInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     buttonRem = (Button)btnInflater.inflate(R.layout.btn_remove, null); 
     rootLayout.addView(buttonRem); 

     //move the dynamic button to different position 
     RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)buttonRem.getLayoutParams(); 
     params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     params1.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.spinnerNew); 
    break; 

    case(R.id.buttonRem): 
     //spinnerNew.setVisibility(View.GONE); //does nothing 
     //buttonRem.setVisibility(View.GONE);//does nothing 
     ViewGroup layout = (ViewGroup) spinnerNew.getParent(); 
     if(null!=layout) 
      layout.removeView(spinnerNew);//does nothing 
    break; 
    } 
} 
+1

你在哪裏設置'buttonRem'的onClickListener? – Apoorv

+0

@Apoorv,對不起。請看我編輯的代碼。現在,我得到Nullpointer異常錯誤。 – Gantavya

+0

你在哪一行獲取NLP –

回答

1
buttonRem = findViewById(R.id.buttonRem); 
    buttonRem.setOnClickListener(this); 

以上是越來越佈局的通貨膨脹之前調用。雖然你使用它您spinnerNew引用是在第二種情況下空(不綁定R.layout.extra_spinner) -

public void onClick(View v) 
{ 
    switch(v.getId()){ 
    case (R.id.button1): 

     RelativeLayout rootLayout = (RelativeLayout)findViewById(R.id.main_layout); 

     //use layout inflater to create 'spinnerNew' on the fly 
     final LayoutInflater spnInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     spinnerNew = (Spinner)spnInflater.inflate(R.layout.extra_spinner, null); 
     rootLayout.addView(spinnerNew); 

     //move the dynamic spinner to different position 
     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)spinnerNew.getLayoutParams(); 
     params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     params.addRule(RelativeLayout.BELOW, R.id.spinner1); 

     spinnerNew.setLayoutParams(params); //causes layout update 

     //use layout inflater to create 'remove button' on the fly 
     final LayoutInflater btnInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     buttonRem = (Button)btnInflater.inflate(R.layout.btn_remove, null); 
     rootLayout.addView(buttonRem); 

     //move the dynamic button to different position 
     RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)buttonRem.getLayoutParams(); 
     params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     params1.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.spinnerNew); 
     buttonRem.setLayoutParams(params1); 
     buttonRem.setOnClickListener(this);//<-------------set onclick here 
    break; 

    case(R.id.buttonRem): 
     //spinnerNew.setVisibility(View.GONE); //does nothing 
     //buttonRem.setVisibility(View.GONE);//does nothing 
     ViewGroup layout = (ViewGroup) spinnerNew.getParent(); 
     if(null!=layout) 
      layout.removeView(spinnerNew);//does nothing 
    break; 
    } 
} 
+0

謝謝,這個作品完美。 – Gantavya

0

其實啊,我發現了問題:從onCreate 移動這 刪除此。在第二種情況下嘗試這樣的事情:

case(R.id.buttonRem): 
    final LayoutInflater spnInflater = (LayoutInflater) Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    Spinner spinnerNew = (Spinner)spnInflater.inflater(R.layout.extra_spinner); 
    spinnerNew.setVisibility(View.GONE); 
    v.setVisibility(View.GONE); 
    ViewGroup layout = (ViewGroup) spinnerNew.getParent(); 
    if(layout != null) 
     layout.removeView(spinnerNew); 
    break;