【问题标题】:How to fire different activities when buttons are clicked in android?在android中单击按钮时如何触发不同的活动?
【发布时间】:2014-06-26 13:42:53
【问题描述】:

我目前正在开发一个安卓应用程序。我的应用中有 4 个布局(1 个主布局和 3 个子布局)。在我的主要布局中,我使用了三个图像按钮,如果单击每个按钮,它就会启动一个活动。即,当单击按钮时,它会转换到下一个布局。我使用 onClicklistener() 方法来处理单击按钮时的事件。问题是,当单击第一个按钮时,它会成功更改为下一个布局,但是当单击其他两个按钮时,应用程序强制关闭。在每个子布局中,我使用一个列表视图来显示一些内容。这是 mainactivity 的代码:

public class MainactivityActivity extends Activity implements View.OnClickListener  {
 @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainactivity);  
 ImageButton m1 = (ImageButton) findViewById(R.id.imageButton1);
 ImageButton m2 = (ImageButton) findViewById(R.id.imageButton2);   
 ImageButton m3 = (ImageButton) findViewById(R.id.imageButton3);
m1.setOnClickListener(this);
m2.setOnClickListener(this);
m3.setOnClickListener(this);
}


@Override
public void onClick(View v) {

           switch(v.getId()) {
               case R.id.imageButton1:
                    Intent intent= new Intent(MainactivityActivity.this,Inspire.class);
                    startActivity(intent);
                    break;
               case R.id.imageButton2:
                   Intent inte = new Intent(MainactivityActivity.this,Love.class);
                   startActivity(inte);
                   break;
               case R.id.imageButton3:
                   Intent inten = new Intent(MainactivityActivity.this,Other.class);
                   startActivity(inten);
                   break;
                   default:
       }
}}

我还在每个按钮的 xml 布局中添加了值 android:onclick="onClick"。当第一个图像按钮转移到下一个布局但单击其他​​图像按钮时,我的应用程序强制关闭并且出现错误。我尝试用谷歌搜索,但找不到完美的解决方案。请帮我解决这个问题。提前致谢

【问题讨论】:

  • 你能发布应用程序崩溃时的日志吗?
  • 能否请您尝试使用一些 Android 术语而不是全部使用布局?我并不是要粗鲁。当你试图解释你的问题时,它会更清楚。

标签: android android-listview onclicklistener android-imagebutton


【解决方案1】:

您必须从您的 xml 中删除 android:onclick="onClick"。因为在您的活动中,您实现了 onClickListener,当您单击按钮时,它会在活动中选择 onClick 方法,但它不会找到任何导致您出错的原因。

【讨论】:

    【解决方案2】:

    使用setOnClickListener() 实用地设置点击监听器或在清单中声明 onClick 方法,但不要同时使用这两种方法。先试试这个,看看它是否有效。如果它不起作用,那么您可以通过发布 logcat 错误消息来更新问题,这将帮助我们为您缩小问题范围。

    这是关于使用 logcat 的tutorial。 :) 祝你好运!

    【讨论】:

      【解决方案3】:

      您在 android 中混合了两种设置 clicklistener 的方法。我会为你澄清它们。

      • 一种方法是在您的 xml 文件中使用 android:onclick="ClickMe" 属性。如果您这样做,您不要需要在您的 java 文件中实现 onClickListener 或 setOnClicklistener。您只需在名为ClickMe 的java 文件中创建一个方法,并将View 作为其参数。下面的例子

      以下行应该在您的 xml 文件中

      android:onclick="ClickMe"
      

      下面的方法应该在你的activity.java文件中

      public void ClickMe(View v){
          switch(v.getId()) {
              case R.id.imageButton1:
                     Intent intent= new Intent(MainactivityActivity.this,Inspire.class);
                     startActivity(intent);
                     break;
              case R.id.imageButton2:
                    Intent inte = new Intent(MainactivityActivity.this,Love.class);
                    startActivity(inte);
                    break;
              case R.id.imageButton3:
                    Intent inten = new Intent(MainactivityActivity.this,Other.class);
                    startActivity(inten);
                    break;
              default:    
          }
      }
      

      就是这样,它应该可以按预期工作,但不要忘记从 java 文件中删除 setOnClicklisteners。

      • 第二种方法是从activity.java文件中动态设置onClickListener。

      从 xml 文件中删除以下行

      android:onclick="onClick"
      

      就是这样。你的代码应该可以工作。

      PS别忘了在 Manifest.xml 中添加你的活动

      【讨论】:

      • 我删除了 android:onclick="onClick " 是的,我实际上忘记在清单中添加活动。我添加了它们,现在它工作正常。非常感谢你:)
      【解决方案4】:

      试试这个方法,希望能帮助你解决问题。

      注意:在执行以下代码之前,请从 xml 中删除此 "android:onclick="onClick"" 行所有 ImageButton。

      public class MainactivityActivity extends Activity {
          ImageButton m1;
          ImageButton m2;
          ImageButton m3;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.mainactivity);
              m1 = (ImageButton) findViewById(R.id.imageButton1);
              m2 = (ImageButton) findViewById(R.id.imageButton2);
              m3 = (ImageButton) findViewById(R.id.imageButton3);
      
              m1.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Intent intent = new Intent(MainactivityActivity.this, Inspire.class);
                      startActivity(intent);
                  }
              });
              m2.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Intent inte = new Intent(MainactivityActivity.this, Love.class);
                      startActivity(inte);
                  }
              });
              m3.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      Intent inten = new Intent(MainactivityActivity.this, Other.class);
                      startActivity(inten);
                  }
              });
          }
      }
      

      【讨论】:

        【解决方案5】:

        从您的 xml 中删除行 android:onclick="onClick"。因为在您的活动中,您已经在使用 onclicklistener。 See this

        此外,Inspire.javaLove.javaOther.java 类也应该在 manifest.xml 中声明。 See this

        【讨论】:

        • 是的,我删除了它并在清单中声明了其他类,现在它工作正常。感谢您的宝贵建议。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 2014-01-24
        相关资源
        最近更新 更多