Java 点击第二个布局上的按钮';行不通

Java 点击第二个布局上的按钮';行不通,java,android,android-layout,android-activity,Java,Android,Android Layout,Android Activity,我想要的是:按下一个按钮,然后应用程序进入另一个布局(页面)。 在这个页面上,你按下一个按钮,然后一些文本显示在一个文本框中。 我为每个布局做了一个活动 我得到这个错误 E/AndroidRuntime(862):java.lang.IllegalStateException:在id为“btnCalculateKf”的视图类android.widget.Button上的onClick处理程序的活动类tweaks.engineering.MainActivity中找不到calculateKfact

我想要的是:按下一个按钮,然后应用程序进入另一个布局(页面)。 在这个页面上,你按下一个按钮,然后一些文本显示在一个文本框中。 我为每个布局做了一个活动

我得到这个错误 E/AndroidRuntime(862):java.lang.IllegalStateException:在id为“btnCalculateKf”的视图类android.widget.Button上的onClick处理程序的活动类tweaks.engineering.MainActivity中找不到calculateKfactor(视图)方法

这是我在我的主要活动上的代码,可以转到其他布局(此布局有效!)

更新的主要活动

public void  Sheetmetal (View view){
    if (view == mbtnSheetmetal){
        setContentView(R.layout.activity_sheetmetal);
        Intent intent = new Intent(this, SheetmetalActivity.class);
        startActivity(intent); 
    }
}       
这是我的第二个活动代码:SheetmetalActivity

package tweaks.engineeringsheet;

import tweaks.engineering.R;
import tweaks.engineering.R.id;
import tweaks.engineering.R.layout;
import android.widget.EditText;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.widget.Button;

public class SheetmetalActivity extends Activity{

    //text box define
    EditText mtxtKfactor;

    //Button define
    Button mbtnCalculateKf;

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

        //connect mtxt"name" to txt"name"
        mtxtKfactor = (EditText) findViewById(R.id.txtKfactor);

        //connect mbtn"name" to btn"name"
        mbtnCalculateKf = (Button) findViewById(R.id.btnCalculateKf);
    }


    public void calculatekfactor(View view){
        if (view == mbtnCalculateKf){       

            mtxtKfactor.setText("works");
            mtxtKfactor.setTextColor(Color.GREEN);

        } //end if
    }//end class
} // end program

我想只要点击一下按钮,就会调用一个名为calculateKfactor
将您的方法公开,否则将找不到它。
请记住,如果不设置可见性修改器,您将处于包可见性而不是公共可见性上

编辑

您说您转到第二个活动(方法所在的位置)执行以下操作:

 public void  Sheetmetal (View view){
    if (view == mbtnSheetmetal){
        setContentView(R.layout.activity_sheetmetal); 
        }
   }
这将更改主活动的布局,因此当您看到按钮时,您仍处于第一个活动中,当您单击时,他将在主活动中搜索您的方法。
要启动其他活动,请执行以下步骤:

Intent intent = new Intent(this, YourSecondActivity.class);
startActivity(intent);

如果要在主活动中使用calculateKFactor函数(通过单击按钮),您有几个选项:

1) 将该功能从钣金活动移至主要活动

2) 如果您需要在两个活动中使用该函数。。。对于没有calculateKFactor函数的活动,您可以使用一个函数来处理初始按钮单击,然后从第二个文件调用公共函数(该函数也必须是静态的)

3) 替代方法,如果您需要在两个活动中使用该函数。。。创建两个活动各自扩展的父活动


可能还需要检查您的资本化。。错误以小写形式计算,但SheetmetalActivity以大写形式计算。

您的Menifest文件中是否有第二个活动?这是一个容易出错的错误

您是在XML中设置了onClick还是缺少了OnClickListener?我在第一个布局上有一个按钮,可以转到第二个布局这很有效。但是运行void CalculateKfactor的按钮不起作用。我已经将button属性中的onclick设置为CalculateKfactor。我需要一个听众吗?我的英语编程词汇不太好,所以我希望你能理解我,你可以发布按钮的布局吗?这是xml中的内容,如果我可以将每个布局的活动分开,为什么我要将calculateKfactor移动到主活动?错误是,它无法在主活动中找到方法,但我将其移动到了主活动中,然后然后我得到了te错误:跳过了100帧,可能在主活动上运行了太多。原始错误表示该方法对主活动不可见。。这就是为什么把它移到那里会有帮助。至于第二个错误,如果没有看到更多,我不确定。我会在早上回复你。晚安,荷兰之夜!坚持住。安卓非常棒,一旦你掌握了窍门,它就相对简单了。它在网上也有很好的文档记录(通常是帮助的最佳参考!)。我知道我把所有内容都改成了小写。请看我的更新代码和.xml这是我的第二个布局。按钮的xml是android:id=“@+id/btnCalculateKf”android:layou\u width=“wrap\u content”android:layout\u height=“wrap\u content”android:layout\u alignParentBottom=“true”android:layout\u alignParentRight=“true”android:onClick=“calculatekfactor”android:text=“@string/button\u calculate”好的,我对你的问题不是很了解,你必须在第二个活动中也使用该方法,否则它找不到。如果您不想重复,请在其他地方定义方法的内容,但请记住,您在布局中命名的方法必须出现在活动中,否则它将不起作用。感谢您的评论,我理解这一点。我在第二个布局中使用与我在第二个活动中使用的方法名称相同的onclick属性。我已经将第二个活动添加到清单中。程序仍在主要活动中搜索方法。我已经将该方法添加到主活动中,然后错误跳过了45帧!应用程序可能在其主线程上做了很多工作。你没有改变活动,你只是在改变布局!!public void Sheetmetal(View-View){if(View==mbtnSheetmetal){setContentView(R.layout.activity_Sheetmetal)}}我试着自己分配,只是它是一种与visualbasic非常不同的编程语言。所以我不知道正确的搜索词来找到我的答案。谢谢你的新体验。谢谢你的评论,我错过了这个。我用谷歌搜索了如何将活动添加到清单中。它现在在那里。仍然出现错误,无法在主活动中找到方法。我已将该方法添加到主要活动中。现在出现此错误:跳过45帧!应用程序可能在其主线程上做了太多工作。我不希望它能在第二个活动中找到方法。