【问题标题】:Multiple activities and buttons?多个活动和按钮?
【发布时间】:2014-01-22 18:26:19
【问题描述】:

我想在单击按钮后制作按钮,然后转到另一个活动? 问题只是第一个按钮起作用了!

public class Main extends Activity {

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

        setContentView(R.layout.main);

        Button PageOneButton = (Button) findViewById(R.id.btnPageOne);
        PageOneButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent myIntent = new Intent(v.getContext(), PageOne.class);
                v.getContext().startActivity(myIntent);

                Button PageTwo = (Button) findViewById(R.id.btnPageTwo);
                PageTwoButton.setOnClickListener(new View.OnClickListener() {   
                    public void onClick(View v) {
                        Intent myIntent = new Intent(v.getContext(), PageTwo.class);
                        v.getContext().startActivity(myIntent); 
                    }
                    {}
                });
            }
        });
    }
}

【问题讨论】:

  • 会发生什么? Logcat 输出?
  • 作为解决代码缩进的答案的额外信息,在 Eclipse 中自动缩进的快捷方式是 ctrl+shift+f,以防您使用的是 IDE。

标签: java android button android-activity


【解决方案1】:

认为是因为你的大部分代码都封闭在第一个 onClickListener 的范围内,试试这样。

Button PageOneButton = (Button) findViewById(R.id.btnPageOne);
PageOneButton.setOnClickListener(new View.OnClickListener(){


    public void onClick(View v) {
        Intent myIntent = new Intent(Main.this, PageOne.class);
        startActivity(myIntent);

});


Button PageTwoButton = (Button) findViewById(R.id.btnPageTwo);
PageTwoButton.setOnClickListener(new View.OnClickListener(){

    public void onClick(View v) {
        Intent myIntent = new Intent(Main.this, PageTwo.class);
        startActivity(myIntent);

});

使用v.getContext() 应该没问题,这正是我通常会做的事情,因为 Activity 本身确实是一个有效的上下文。我想它对我来说似乎更具可读性。

编辑:

只是为了澄清代码的当前状态。只有在按下第一个按钮后,才会为第二个按钮分配一个 onClickListener。但由于第一个按钮将应用程序带到一个新的 Activity,本质上会破坏主 Activity,因此第二个按钮将永远没有机会到达它的 onClickListener。

希望这是有道理的,不过上面的代码应该可以解决问题。

【讨论】:

  • +1,但请修正第二个按钮名称,正如@edwoollard 所注意到的那样:)
  • @Melquiades 已修复 :) 只是从问题中复制/粘贴
【解决方案2】:

您的代码中目前存在几个问题。第一个问题是您的第二个按钮是在第一个按钮的声明中定义的。下一个问题是您将第二个 OnClickListener 设置为错误命名的按钮。您打错了,而不是 PageTwo,您将其称为 Button(可能您想根据第一个 Button 将其称为 PageTwoButton),然后将 OnClickListener 设置为 PageTwoButton。看到您还使用多个按钮,使用 GroupOnClickListener 更清洁、更高效。在设置 Intent 时,我可能还建议使用 'this' 而不是 'v.getContext()'。将您的代码更改为:

Button PageOneButton = (Button) findViewById(R.id.btnPageOne);
Button PageTwoButton = (Button) findViewById(R.id.btnPageTwo);
PageOneButton.setOnClickListener(addGroupOnClickListener);
PageTwoButton.setOnClickListener(addGroupOnClickListener);    

private OnClickListener addGroupOnClickListener = new OnClickListener() {
    public void onClick(View v) {
        if (v == PageOneButton) {
            Intent myIntent = new Intent(Main.this, PageOne.class);
            startActivity(myIntent);
        } else if (v == PageTwoButton) {
            Intent myIntent = new Intent(Main.this, PageTwo.class);
            startActivity(myIntent);
        }  
   }
};

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    两个字:

    代码缩进

    如果您正确缩进代码,您会注意到您在第一个按钮的侦听器中设置了 OnClickListener。正如其他人已经建议的那样,将其移到您的第一个听众之外。

    还有一对额外的 {},这是多余的。

    另外,@edwoollard 注意到,对于第二个按钮,您使用了两个不同的名称,PageTwo 和 PageTwoButton。请记住这一点,除非是拼写错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2015-12-18
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多