2014-01-18 127 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;