【问题标题】:Android button navigation with onclick listeners带有 onclick 监听器的 Android 按钮导航
【发布时间】:2012-11-20 17:17:52
【问题描述】:
main.xml
--------
|button1| (button press)>page1.xml
|button2| (button press)>page2.xml
|button3| (button press)>page3.xml
|button4| (button press)>page4.xml
|button5| (button press)>page5.xml
|button6| (button press)>page6.xml
-------------------------------------------

当一个按钮被点击时,它会转到相应的页面。实现这一点的最佳/最简单的方法是什么?当我尝试 onclick 侦听器时,我尝试了一切都无济于事。我可以让一个听众工作,但是当我尝试让多个听众工作时,它就搞砸了,我无法弄清楚。 我目前的方法是使用这 2 个 java 文件
activity1.java

package install.fineline;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;

import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;

public class Activity1 extends Activity {

Button Button1;
Button Button2;
Button Button3;
Button Button4;
Button Button5;
Button Button6;



public void addListenerOnButton() {

final Context context = this;

Button1 = (Button) findViewById(R.id.autobody);

Button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        Intent intent = new Intent(context, Activity2.class);
        startActivity(intent);   

    }

});

Button2 = (Button) findViewById(R.id.glass);

Button2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        Intent intent = new Intent(context, Activity2.class);
        startActivity(intent);   

    }

});

Button3 = (Button) findViewById(R.id.wheels);

Button3.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        Intent intent = new Intent(context, Activity2.class);
        startActivity(intent);   

    }

});

Button4 = (Button) findViewById(R.id.speedy);

Button4.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        Intent intent = new Intent(context, Activity2.class);
        startActivity(intent);   

    }

});

Button5 = (Button) findViewById(R.id.sevan);

Button5.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        Intent intent = new Intent(context, Activity2.class);
        startActivity(intent);   

    }

});

Button6 = (Button) findViewById(R.id.towing);

Button6.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

    Intent intent = new Intent(context, Activity2.class);
    startActivity(intent);   

}

});

}}

这是我的另一个 java 文件

activity2.java
包安装.fineline;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class Activity2 extends Activity {

Button button1;

public void onCreate1(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autobody);
}
Button button2;

public void onCreate2(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.glass);
}
Button button3;

public void onCreate3(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wheels);
}
Button button4;

public void onCreate4(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.speedy);
}
Button button5;

public void onCreate5(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sevan);
}

Button button6;

public void onCreate6(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.towing);
}}

【问题讨论】:

  • 这样就不行了。你必须回到 android hello world 并从那里继续前进。 android不知道你的onCreate1、2、3。它只知道onCreate。你会做的是完全使用不同的活动。

标签: java android navigation


【解决方案1】:

您应该为每个页面定义一个活动。所以总共有7个活动,包括主要的。在主活动中,定义单个 onClickListener 来处理所有点击。

class ClickListener implements View.OnClickListener {
    void onClick(View v) {
       switch(v.getId()) {
        case R.id.btn_1:
             ...
             break;
        ...
       }
    }

将此侦听器设置为所有 6 个按钮。

【讨论】:

    【解决方案2】:

    你肯定做错了。您的所有按钮都在调用相同的活动。如果您希望他们去不同的地方,请创建不同的活动。如果您希望他们使用不同的数据去同一个地方,请使用意图将信息作为额外信息发送。

    另外,为了便于阅读,您可能想了解 XML 定义的点击方法。

    【讨论】:

      【解决方案3】:

      好的,首先,实现 OnClickListener,你必须添加未实现的方法onClick()

      public class Activity1 extends Activity implements OnClickListener {
      

      然后初始化你的按钮并在你的onCreate()中添加点击监听器

      Button1 = (Button) findViewById(R.id.autobody);
      Button1.setOnClickListener(this);
      

      然后在onClick() 中设置一个switch/case

      @Override
      public void onClick(View v) {
          // TODO Auto-generated method stub
          switch (v.getId()) {
          case R.id.autobody:
              // do code
              break;
          case R.id.glass:
              // do code
              break;
          }
      }
      

      我只是做了一些你的按钮,但你可以弄清楚其余的。只需确保在 onCreate() 中初始化并添加 onClickListeners 即可

      【讨论】:

        【解决方案4】:

        请勿将按钮用于此功能。使用 ListView 并使用其 onItemClickListener 您将获得被点击的行号。然后您可以使用ViewPager 根据点击显示页面。

        【讨论】:

          【解决方案5】:

          首先,这不是您的问题,而是使代码更易于阅读并节省内存:创建一个 onClickListener 并在其中检查单击了哪个按钮。

          class Activity1 extends Activity implements onClickListener {
          
              public void onClick(View v) {
                  switch (v.getId()) {
                  case R.id.button1:
                      // handle button1 press
                  case R.id.button2:
                      // ...
                  }
              }
          }
          

          现在真正的问题是:在您的第二个活动中,Android 不知道任何 onCreate1()、onCreate2() 等函数。相反,您必须实现 onCreate()(Android 确实知道),并将 Intent 中按下的按钮发送给它,如下所示:

          // You can just take your activity object as the context, 
          // no need to convert explicitly.
          Intent i = new Intent(this, Activity2.class);
          i.putExtra("button", 1);
          startActivity(i);
          

          然后在你的活动中获取数据:

          public void onCreate() {
              int button = getIntent.getIntent().getInt("button");
          }
          

          【讨论】:

            【解决方案6】:
            1. 使用单个 switch-case 更改您的 OnClick 方法
            2. 像这样从 Activity1 传递数据:

              intent.putExtra("buttonClick", buttonnumber); 开始活动(意图);

            3. 像这样在activity2中接收数据:

              clickedButton = getIntent().getExtras().getString("buttonClick");

            4. 在activity2中将方法名改为OnCreate

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-02-04
              • 1970-01-01
              • 1970-01-01
              • 2014-06-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多