要求
应用程序要求是当用户第一次安装并打开时,他将显示LoginActivity
并且一旦他成功登录,他将被要求输入4位数passcode
,以便在未来,如果应用程序保持空闲状态并且手机被锁定。
设计
我决定在One Activity
MainActivity
中设计{和} contentView
并在LoginActivity
加载@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);
}
}
@Override
protected void onResume(){
super.onResume();
if(isUserValid) {
setContentView(R.layout.activity_main);
}
else{
setContentView(R.layout.activity_login);
}
}
@Override
protected void onStart(){
super.onStart();
if(isUserValid) {
setContentView(R.layout.activity_main);
}
else{
setContentView(R.layout.activity_login);
}
}
。
代码部分
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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
}
});
}
LoginActivity.java
activity_login.xml
我知道我可以将点击事件直接附加到setActivity()
中的按钮,但只有当我们使用setContentView
代替setContentView
并且我应该使用{{1这里因为我不希望用户在单击后退按钮时在这两个视图之间导航。我还尝试在其他情况下onCreate
MainActivity.java
上添加点击事件按钮,如下所示:
@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_login.xml
的按钮。那是什么意思呢?我没有获得功能,我刚刚开始学习Android。希望找到一些解决此问题的方法。
答案 0 :(得分:3)
我强烈建议您使用多个片段,但仍然可以通过编程方式添加内容视图,如下所示:
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);
我再次不推荐这种方法。使用片段或自定义对话框会更好。
希望这会有所帮助。
答案 1 :(得分:1)
尝试使用片段而不是不同的内容视图。
活动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>
活性
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (isUserValid) {
ft.replace(R.id.content, new LoggingFragment(), "loggingFragment");
} else {
ft.replace(R.id.content, new MainFragment(), "mainFragment");
}
ft.commit();
}
片段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>
片段
@Override
protected View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment, null);
Button btnValidate=(Button)v.findViewById(R.id.validate_code);
btnValidate.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//Functionality
}
});
return v;
}