2016-12-25 27 views
0

我有一个问题,我似乎无法为位于2个不同布局的2个单独按钮设置2个onClickListener,发生异常。在位于2个不同布局的按钮上设置2 onClickListener()时引起异常

btnClickToSecondPage按钮位于activity_main.xml布局中,btnObjClickToGoToFirstPage按钮位于second_activity.xml布局。

我的程序的Java代码位于下方位置

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(getWindow().FEATURE_NO_TITLE); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    setContentView(R.layout.activity_main); 

    Button btnObjClickToGoToSecondPage = (Button) findViewById(R.id.btnClickToSecondPage); 
    Button btnObjClickToGoToFirstPage = (Button) findViewById(R.id.btnChangetoFirstPage); 


    btnObjClickToGoToFirstPage.setOnClickListener(
     new Button.OnClickListener(){ 
      @Override 
      public void onClick (View v) 
      { 
       setContentView(R.layout.second_activity); 
      } 
     } 
    ); 
    btnObjClickToGoToSecondPage.setOnClickListener(
      new Button.OnClickListener(){ 
       @Override 
       public void onClick (View v) 
       { 
        setContentView(R.layout.activity_main); 
       } 
      } 
    ); 
} } 

请帮我纠正了感谢的问题。

+0

我认为这个问题与听众点击里面的setContentView。您初始化第一个布局中的按钮。第一次单击布局后,将更改和按钮将不具有有效的上下文。尝试用onclick监听器中的日志替换setContentViews – Vigen

回答

0

请执行View.Onclick听者不Button.onclick听众

btnObjClickToGoToFirstPage.setOnClickListener(
     new View.OnClickListener(){ 
      @Override 
      public void onClick (View v) 
      { 
       setContentView(R.layout.second_activity); 
      } 
     } 
    ); 
+0

只需添加一下,我刚发现当两个按钮位于不同的布局时,程序都会导致异常。当这两个按钮的布局相同时,我对此代码也不例外。 –

+0

我编辑了这个问题,因为我刚发现当两个按钮位于不同的布局时程序都会导致异常。当两个按钮位于同一个布局中时,我也不例外地设置2 onClickListener()。 –

0

这不是一个正确的方式切换Android的页面。使用两种活动来切换具有意图的页面。

Intent newPage = new Intent (this, YourActivityNameForNewPage.class); 
startActivity(newPage); 

将上面的代码放在您的按钮的onClick()中。

0

如果你想显示一个新的页面,你要么开始一个新的活动,要么开始一个新的片段。

更改contentView而不是正确的方法来解决这个问题,不应该这样做。

请参阅活动文档here

假设你有另一Activity这里称为SecondActivity是你将如何启动它:

btnObjClickToGoToSecondPage.setOnClickListener(
     new Button.OnClickListener(){ 
      @Override 
      public void onClick (View v) 
      { 
       Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
       startActivity(intent); 
      } 
     } 
); 

然后您可以定义新的活动的XML布局,即second_activity.xml

如果他们都有类似的布局使用fragment也是一个不错的选择。

基本上,你开始一个新的活动或片段,以显示任何新的或更改数据动态地说你的按钮的onClick()

这个问题还可以清除你的疑虑: What is setContentView(R.layout.main)?