java - startActivity() 正在重新加载相同的活动,而不是开始新的活动
问题描述
更新:菜鸟错误。我没有将片段类型更改为“MenuFragment”,它仍然是来自其他活动的“LoginFragment”。是的,我复制并粘贴过来,并没有正确检查.. 谢谢大家的帮助。
我正在为作业创建一个简单的“登录”屏幕,但似乎无法开始我的下一个活动。“登录”按钮仅用于读取已输入的用户名和密码文本,如果正确,则启动“MenuActivity”。相反,它只是重新启动相同的活动(或者至少动画就像活动已经重新启动一样)。
我正在从片段中调用 startActivity(),但我相信我的语法在那里是正确的。
这是代码。
主片段 onCreateView 方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_login, container, false);
// get references for all major ui elements
welcomeText = (TextView) view.findViewById(R.id.welcomeText);
username = (EditText) view.findViewById(R.id.usernameEditText);
password = (EditText) view.findViewById(R.id.pinEditText);
loginButton = (Button) view.findViewById(R.id.loginButton);
loginButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
// if username and password are in the user list
if(dataset.userLogin(username.getText().toString(), password.getText().toString()))
{
// change activity to main menu activity
Intent intent = new Intent(getActivity(), MenuActivity.class);
startActivity(intent);
}
else
{
Toast.makeText(view.getContext(), "Error: Username or password is incorrect", Toast.LENGTH_SHORT).show();
}
}
});
return view;
}
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pracgrader">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PracGrader">
<activity
android:name=".MenuActivity"
android:exported="true" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
菜单活动:
public class MenuActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
// assign login fragment
FragmentManager fm = getSupportFragmentManager();
LoginFragment frag = (LoginFragment) fm.findFragmentById(R.id.menuFragmentContainer);
if(frag == null)
{
frag = new LoginFragment();
fm.beginTransaction()
.add(R.id.menuFragmentContainer, frag)
.commit();
}
}
}
菜单片段:
public class MenuFragment extends Fragment {
private Dataset dataset;
private Button userListButton;
private Button practicalListButton;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public MenuFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment MenuFragment.
*/
// TODO: Rename and change types and number of parameters
public static MenuFragment newInstance(String param1, String param2) {
MenuFragment fragment = new MenuFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataset = Dataset.getInstance();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_menu, container, false);
userListButton = (Button) view.findViewById(R.id.userListButton);
practicalListButton = (Button) view.findViewById(R.id.practicalListButton);
userListButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
}
});
practicalListButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
}
});
return view;
}
}
请建议您希望看到的任何其他代码。任何帮助是极大的赞赏。谢谢。
解决方案
使用片段按钮打开另一个活动 ,您可以检查此链接以获得详细的答案,您可以通过简单的实现覆盖片段上的 OnViewCreated,然后您可以在那里调用点击侦听器,就像我在下面发布代码的示例一样,它将 100% 工作。 步骤 1) @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); 初始化(视图);onClickListener();
推荐阅读
- python - 为什么我不能在 python 类的构造函数 __init__() 中启动两个线程?
- apache - xampp 设置与服务器的稳定连接
- angular - @angular/compiler-cli 的版本需要为 2.3.1 或更高版本。当前版本是“7.0.1”
- laravel - 注销后如何重定向回来,除非页面需要身份验证?
- vuetify.js - vuetifyjs:如何在 v-data-table 中创建多行标题?
- c# - 我应该如何通过 Autofac.Dependency 注入库将参数传递给 Autofac 容器以进行自动依赖解析
- javascript - 计算多个输入的差异并写在页面上
- c++ - 复合赋值重载 (C++)
- apache-httpclient-4.x - Apache HTTPClient DigestAuth 不会从 Challenge 转发“不透明”值
- java - Spring Boot在配置问题中定义bean