【问题标题】:How to configure switch to start Activity with fragments? [duplicate]如何配置开关以使用片段启动 Activity? [复制]
【发布时间】:2020-04-11 15:41:33
【问题描述】:

我在配置开关时遇到问题:

    public class BottomNavigationBar extends AppCompatActivity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bottom);
            BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
            bottomNav.setOnNavigationItemSelectedListener(navListener);
 22 line >  bottomNav.setSelectedItemId(R.id.nav_home);
        }

        private BottomNavigationView.OnNavigationItemSelectedListener navListener =
                new BottomNavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                        Fragment selectedFragment = null;

                        switch (item.getItemId()) {
                           case R.id.nav_home:
                               Intent i = new Intent(BottomNavigationBar.this, NoteActivity.class);
                   34 line>    startActivity(i);
                               break;
                            case R.id.nav_game:
                                selectedFragment = new GameFragment();
                                break;
                            case R.id.nav_user:
                                selectedFragment = new UserFragment();
                                break;
                        }

                        getSupportFragmentManager()
                                .beginTransaction()
                                .replace(R.id.fragment_container,
                                        selectedFragment)
                                .commit();

                        return true;

我想打开一个 NoteActivity 而不是 HomeFragment。

更新后我的应用程序崩溃了:( Logcat 指向第 34 行和第 22 行

请帮忙,谢谢。

这是我的应用程序 logcat 的完整堆栈跟踪:

 E/AndroidRuntime: FATAL EXCEPTION: main
            Process: com.example.firestore, PID: 16877
            java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.firestore/com.example.firestore.BottomNavigationBar}:
    android.content.ActivityNotFoundException: Unable to find explicit
    activity class
    {com.example.firestore/com.example.firestore.NoteActivity}; have you
    declared this activity in your AndroidManifest.xml?
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2914)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049)
                at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
                at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
                at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
                at android.os.Handler.dispatchMessage(Handler.java:106)
                at android.os.Looper.loop(Looper.java:193)
                at android.app.ActivityThread.main(ActivityThread.java:6692)
                at java.lang.reflect.Method.invoke(Native Method)
                at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
             Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class
    {com.example.firestore/com.example.firestore.NoteActivity}; have you
    declared this activity in your AndroidManifest.xml?
                at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2012)
                at android.app.Instrumentation.execStartActivity(Instrumentation.java:1675)
                at android.app.Activity.startActivityForResult(Activity.java:4586)
                at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
                at android.app.Activity.startActivityForResult(Activity.java:4544)
                at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
                at android.app.Activity.startActivity(Activity.java:4905)
                at android.app.Activity.startActivity(Activity.java:4873)
                at com.example.firestore.BottomNavigationBar$1.onNavigationItemSelected(BottomNavigationBar.java:34)
            at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:238)
            at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
            at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
            at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
            at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:520)
            at com.example.firestore.BottomNavigationBar.onCreate(BottomNavigationBar.java:22)
            at android.app.Activity.performCreate(Activity.java:7136)
            at android.app.Activity.performCreate(Activity.java:7127)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3049) 
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809) 
            at android.os.Handler.dispatchMessage(Handler.java:106) 
            at android.os.Looper.loop(Looper.java:193) 
            at android.app.ActivityThread.main(ActivityThread.java:6692) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
    I/Process: Sending signal. PID: 16877 SIG: 9
    Process 16877 terminated.

不,我没有在我的 Manifest 中声明 NoteActivity:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.firestore">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<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/AppTheme">
    <activity android:name=".BottomNavigationBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

我认为所有片段都在正确的位置。

【问题讨论】:

  • 那条线在一个匿名的OnNavigationItemSelectedListener 实例中,所以普通的this 指的是那个对象,但是你需要一个Context——当前的BottomNavigationBar 实例——所以你需要限定this 这样:new Intent(BottomNavigationBar.this, NoteActivity.class).
  • 现在我的应用程序崩溃了,你能检查一下吗?
  • 请从您的 logcat 发布完整的堆栈跟踪。
  • Unable to find explicit activity class {com.example.firestore/com.example.firestore.NoteActivity}; have you declared this activity in your AndroidManifest.xml? - 您是否忘记在 NoteActivity 的清单中添加 &lt;activity&gt; 元素?

标签: java android


【解决方案1】:

你必须把它添加到你的 manifest.xml 中

    <activity android:name=".activity.NoteActivity" />

为了避免启动一个空片段,您必须将切换块更新为

 public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                    Fragment selectedFragment = null;

                    switch (item.getItemId()) {
                       case R.id.nav_home:
                           Intent i = new Intent(BottomNavigationBar.this, NoteActivity.class);
               34 line>    startActivity(i);
                           break;
                        case R.id.nav_game:
                            selectedFragment = new GameFragment();
                    getSupportFragmentManager()
                            .beginTransaction()
                            .replace(R.id.fragment_container,
                                    selectedFragment)
                            .commit();
                            break;
                        case R.id.nav_user:
                            selectedFragment = new UserFragment();
                    getSupportFragmentManager()
                            .beginTransaction()
                            .replace(R.id.fragment_container,
                                    selectedFragment)
                            .commit();
                            break;
                    }


                    return true;}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多