首页 > 解决方案 > 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;
    }
}

请建议您希望看到的任何其他代码。任何帮助是极大的赞赏。谢谢。

标签: javaandroidandroid-studioandroid-fragmentsstart-activity

解决方案


使用片段按钮打开另一个活动 ,您可以检查此链接以获得详细的答案,您可以通过简单的实现覆盖片段上的 OnViewCreated,然后您可以在那里调用点击侦听器,就像我在下面发布代码的示例一样,它将 100% 工作。 步骤 1) @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); 初始化(视图);onClickListener();


推荐阅读