Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setContentView没有';t为按钮附加单击事件_Java_Android - Fatal编程技术网

Java setContentView没有';t为按钮附加单击事件

Java setContentView没有';t为按钮附加单击事件,java,android,Java,Android,要求 应用程序要求是当用户第一次安装并打开时,他将显示LoginActivity,一旦他成功登录,他将被要求输入4位passcode,以便在应用程序闲置且手机锁定的情况下在将来使用 设计 我决定将其设计为一个活动,即main活动,并在一定条件下加载LoginActivity的contentView 代码部分 MainActivity.java LoginActivity.java 我知道我可以将click event直接附加到activity\u login.xml中的按钮上,但是只有当我们

要求

应用程序要求是当用户第一次安装并打开时,他将显示
LoginActivity
,一旦他成功登录,他将被要求输入4位
passcode
,以便在应用程序闲置且手机锁定的情况下在将来使用

设计

我决定将其设计为一个活动,即
main活动
,并在一定条件下加载
LoginActivity的
contentView

代码部分

MainActivity.java


LoginActivity.java


我知道我可以将click event直接附加到
activity\u login.xml
中的按钮上,但是只有当我们使用
setActivity()
而不是
setContentView
时,它才起作用,并且应该在这里使用
setContentView
,因为我不希望用户在单击后退按钮时在这两个视图之间导航。我还尝试在以下else条件下为
MainActivity.java
上的
onCreate
中的按钮附加click事件:

@Override
protected void onCreate(Bundle savedInstanceState) {
    isUserValid=false; //just for testing on initial screen i.e. Login
    super.onCreate(savedInstanceState);
    if(isUserValid) {
        setContentView(R.layout.activity_main);
    }
    else{
        setContentView(R.layout.activity_login);
        //Attaching click event to button
        Button btnValidate=(Button)findViewById(R.id.validate_code);
        btnValidate.setOnClickListener(new View.OnClickListener(){
             @Override
             public void onClick(View view) {
                  //Functionality
             }
        });
    }
}

但这没有帮助。此外,我继续尝试将事件附加到这两个活动的
onStart
onResume
状态,但都不起作用。单击事件根本不会触发。我保证带有
id
的按钮出现在
activity\u login.xml
中。我在这里犯的错误是什么。我并没有得到这些功能,而且我刚刚开始学习Android。希望找到解决此问题的方法。

尝试使用片段而不是不同的内容视图

活动xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>
片段xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">

<Button
       android:id="@+id/button"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

</LinearLayout>

尝试使用片段而不是不同的内容视图

活动xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>
片段xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">

<Button
       android:id="@+id/button"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

</LinearLayout>

我强烈建议使用多个片段,但您仍然可以按如下方式以编程方式添加内容视图:

View login = this.getLayoutInflater().inflate(R.layout.activity_login);
addContentView(login, new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
您可以使用膨胀登录来查找视图和附加侦听器

要删除登录名,可以使用

((ViewGroup)getWindow().getDecorView()).removeView(login);
我再次不推荐这种方法。使用片段或自定义对话框会更好


希望这会有所帮助。

我强烈建议使用多个片段,但您仍然可以通过编程方式添加内容视图,如下所示:

View login = this.getLayoutInflater().inflate(R.layout.activity_login);
addContentView(login, new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
您可以使用膨胀登录来查找视图和附加侦听器

要删除登录名,可以使用

((ViewGroup)getWindow().getDecorView()).removeView(login);
我再次不推荐这种方法。使用片段或自定义对话框会更好


希望这会有所帮助。

或者,您可以仅使用android:onClick=“btnValidate”在XML中声明onClick函数,并在MainActivity中定义函数,如
public void btnValidate(View View View){您的功能在这里}
@NishantPardamwar尝试过这一点。。还是不走运(或者,您可以仅通过使用android:onClick=“btnValidate”在XML中声明onClick函数,并在MainActivity中定义函数,如
public void btnValidate(视图){您的功能在这里}
@NishantPardamwar尝试过……仍然不走运(这是一种不好的做法,但如果你真的想尝试这种做法,可以让你的活动实现View.OnClickListener并使用@Override public void onClick(View v){if(v.getId()==你的id){//do smth}}如果您提供更多关于使用片段实现的详细信息,我会很有帮助,这样我就可以尝试..检查此教程的错误做法,但如果您真的想尝试此教程,请让您的活动实现View.OnClickListener并使用@Override public void onClick(View v){if(v.getId()=您的id){//do smth}如果您能提供更多关于使用片段实现的细节,我会很有帮助的,这样我就可以试试了