如何在android中单击按钮时触发不同的活动?

时间:2014-06-26 13:42:54

标签: android android-listview onclicklistener android-imagebutton

我目前正在开发一款Android应用。我的应用程序中有4个布局(1个主布局和3个子布局)。在我的主要布局中,我使用了三个图像按钮,如果单击每个按钮,它将启动一个活动。即,当点击按钮时,它转换到下一个布局。单击按钮时,我使用onClicklistener()方法处理事件。问题是,当单击第一个按钮时,它会成功更改为下一个布局,但是当单击其他两个按钮时,应用程序强制关闭。在每个子布局中,我使用listview来显示一些内容。以下是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:
       }
}}

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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

这是使用logcat的tutorial。祝你好运!

答案 2 :(得分:0)

你已经混合了两种在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中添加您的活动

答案 3 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

注意:在执行以下代码之前删除此" android:onclick =" onClick""从xml排出所有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);
            }
        });
    }
}

答案 4 :(得分:0)

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

此外Inspire.javaLove.java&还应在manifest.xml中声明Other.java个类。 See this