2017-05-29 100 views
0

我正尝试在活动中打开活动。我成功地从MainActivity那里做了,但由于某种原因,这不会让我再次这样做。Android Studio打开活动

我对此很新,请帮帮我。

package com.example.edonfreiner.siddur; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class Davening extends AppCompatActivity { 
    Button shacharisButton, minchaButton, maarivButton; 

    public void openShacharis() { 
     shacharisButton = (Button) findViewById(R.id.shacharis); 
     shacharisButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       Intent open = new Intent(Davening.this, Shacharis.class); 

       startActivity(open); 



      } 
     }); 
    } 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_davening); 

     openShacharis(); 


    } 
} 

这是我的班级的代码,没有错误,这意味着所有按钮和引用都存在于XML文件中。

预先感谢您。

+1

你有没有在Android清单中声明你的'Shacharis'活动?你有没有日志? – Logain

+0

我没有,非常感谢。这到底是什么? –

回答

0

您构建的逻辑是错误的,因为您正在调用onCreate中的函数,该函数不会激活其中的onClick。当你点击你的对象时,它不会激活onClick,因为它被封装在openShacharis中。因此,解决方案是从openShacharis以这种方式启动onClick:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_davening); 

    shacharisButton = (Button) findViewById(R.id.shacharis); 
    shacharisButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      openShacharis(); 
     } 
    }); 
} 

public void openShacharis() { 
    Intent open = new Intent(Davening.this, Shacharis.class); 
    startActivity(open); 
} 
+0

代码上使用的名称具有误导性,但逻辑正确。在'onCreate'期间,他调用'openShacharis'来设置点击监听器以及用于打开活动的回调。 我同意你的命名,因为他的'openShacharis'没有打开,只是注册了监听者,但这似乎不是他的问题的根源。 – Logain

0

所有活动都需要在Android Manifest上注册。 正如您在评论中所述,如果您没有注册,它将无法打开。

This documentation可能会帮助你。特别是它所在的部分Adds the required <activity> element in AndroidManifest.xml.

+0

这很奇怪,因为OP说**没有错误**。如果未在Manifest上注册,则会引发错误。感谢您的评论。 – statosdotcom

+0

如果活动未在清单中注册,则说明您的日志中有错误。我的假设是OP错过了它,因为它不会导致应用程序崩溃或导致任何编译警告。 – Logain