代码之家  ›  专栏  ›  技术社区  ›  Adam Varhegyi

菜单项在片段中不可见

  •  -2
  • Adam Varhegyi  · 技术社区  · 6 年前

    我想在我的片段中显示一个菜单。我已经做过无数次了,但不知什么原因,它现在不起作用了。这是我第一次用这种新仪器做实验

    碎片:

    public class FragmentDogs extends Fragment {
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_dogs, container, false);
    
        setHasOptionsMenu(true);
    
        return rootView;
    }
    
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
    
        inflater.inflate(R.menu.menu_dogs, menu);
    
        }
    }
    

    活动:

    public class ActivityMain extends AppCompatActivity {
    
    Toolbar toolbar;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
    
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FragmentDogs()).commit();
        }
    }
    

    菜单:

        <?xml version="1.0" encoding="utf-8"?>
        <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <item
            android:id="@+id/dogs_add_menu_item"
            android:icon="@drawable/ic_plus"
    
            android:title="@string/dogs"  />
    

     android {
        compileSdkVersion 28
        defaultConfig {
            applicationId "com.platinum"
            minSdkVersion 21
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.google.android.material:material:1.0.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
    
    
        implementation 'com.google.android.gms:play-services-maps:16.0.0'
    
    
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    

    截图:

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jakob    6 年前

    toolbar 碎片布局和 SupportActionBar .

    你的碎片布局

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:elevation="5dp"
        android:minHeight="?attr/actionBarSize"
        app:contentInsetEnd="50dp"
        app:contentInsetRight="50dp"
        app:contentInsetLeft="0dp"
        app:contentInsetStart="0dp"
        android:title="testtext"
        app:contentInsetStartWithNavigation="0dp">
    </android.support.v7.widget.Toolbar>
    

    public class YourFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.yourfragmentlayout, container, false);
        setHasOptionsMenu(true);
    
        Toolbar toolbar = (Toolbar)rootView.findViewById(R.id.toolbar);
        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
        ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("YourFragment");
    
        return rootView;
    }
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu_dogs, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
    }
    

    YourFragment() 红色下划线

    enter image description here

    确保您正在使用

    import android.support.v4.app.Fragment;

    而不是

    import android.app.Fragment;

        2
  •  0
  •   Martin Zeitler    6 年前

    menu.xml ,可能以 </menu>

    testInstrumentationRunner 不是正确的测试运行程序 androidx androidx.fragment:fragment:1.0.0 是对 Fragment migration guide 进一步 安卓利德 你可能缺少的依赖;相似的 androidx.appcompat:appcompat:1.0.2 对于 AppCompatActivity

    它可能是一个 X/Y problem