0

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

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"。当第一个图像按钮转移到下一个布局但单击其他​​图像按钮时,我的应用程序强制关闭并且出现错误。我尝试用谷歌搜索,但找不到完美的解决方案。请帮我解决这个问题。提前致谢

4

5 回答 5

0

android:onclick="onClick"从您的 xml 中删除该行。因为在您的活动中,您已经在使用 onclicklistener。看到这个

此外Inspire.javaLove.java&Other.java类也应该在 manifest.xml 中声明。看到这个

于 2014-06-26T14:00:58.447 回答
0

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

这是使用 logcat 的教程。:) 祝你好运 !

于 2014-06-26T13:58:18.163 回答
0

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

  • android:onclick="ClickMe"一种方法是在您的 xml 文件中使用属性。如果你这样做,你不需要在你的 java 文件中实现 onClickListener 或 setOnClicklistener。您只需在 java 文件中创建一个名为的方法ClickMe ,并将 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 中添加您的活动

于 2014-06-26T13:59:12.383 回答
0

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

于 2014-06-26T13:47:58.697 回答
0

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

注意:在执行以下代码之前,请从 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);
            }
        });
    }
}
于 2014-06-26T13:59:44.733 回答