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}如果您能提供更多关于使用片段实现的细节,我会很有帮助的,这样我就可以试试了