实施onClick子菜单以启动新活动

时间:2018-08-17 19:35:37

标签: java android android-intent onclick

我正在构建一个在工具栏中具有菜单项的应用程序,我为一个菜单创建了子菜单,即其ID为“ cloud”。当点击将打开不同的活动时,我想在每个子菜单上实现onclick。

这是menu.xml文件

<?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/action_refresh"
        app:showAsAction="ifRoom"
        android:title="Refresh"
        android:icon="@drawable/ic_loop_black_24dp"></item>


    <item
        android:id="@+id/notes"
        app:showAsAction="ifRoom"
        android:title="Refresh"
        android:icon="@drawable/ic_event_note_black_24dp"></item>

    <item
        android:id="@+id/cloud"
        app:showAsAction="ifRoom"
        android:title="Refresh"
        android:icon="@drawable/ic_cloud_upload_blackt_24dp">
        <menu>
            <group
                android:checkableBehavior="single">
                <item android:id="@+id/imageee"
                    android:title="Image Upload"
                    android:orderInCategory="100"
                    app:showAsAction="ifRoom" />

                <item android:id="@+id/pdfff"
                    android:title="Pdf Upload"
                    android:orderInCategory="100"
                    app:showAsAction="never"/>

            </group>
        </menu>
    </item>

</menu>

这是Mainactivity文件

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        mymenu = menu;
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case R.id.action_refresh:
                Intent intent = new Intent(MainActivity.this, UpdateService.class);
                startService(intent);
           

                }
                return true;

            case R.id.notes:{
                Intent activity_weather = new Intent(this,Physics.class);
                startActivity(activity_weather);

            }
                return true;


            case R.id.cloud:{


            }
            return true;

        }
        return super.onOptionsItemSelected(item);
    }

我寻找答案并自己尝试,但我不知道如何实现。

感谢您的帮助。

谢谢。

3 个答案:

答案 0 :(得分:1)

我为您提供解决方案:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_refresh:
            // TODO:
            toast("refresh");
            return true;
        case R.id.notes:
            // TODO:
            toast("notes");
            return true;
        case R.id.imageee:
            // TODO: Start your image upload
            toast("imageee");
            return true;
        case R.id.pdfff:
            // TODO: Start your PDF upload
            toast("pdfff");
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

public void toast(String message) {
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}

我写了toast方法来在用户单击菜单或子菜单上的项目时显示吐司。请删除//TODO:行,并在其中添加每种情况的代码。

答案 1 :(得分:0)

我不希望你拥有

android:checkableBehavior="single"

在子菜单上设置。仅当您只想捕获菜单项中的一个(或多个)选择时,此行为才有用,而当用户选择子菜单项时您实际上想做出反应(即:做某事)时,此行为才有用。

根据您的问题,听起来好像您想在用户选择这些子菜单项之一时启动另一个Activity。为此,只需将这些菜单项添加到switch中的onOptionsItemSelected()语句中即可:

case R.id.imageee:
    Intent imageIntent = new Intent(this, Upload.class);
    startActivity(imageIntent);
    return true;
case R.id.pdfff:
    Intent pdfIntent = new Intent(this, Pdf.class);
    startActivity(pdfIntent);
    return true;

答案 2 :(得分:0)

另一个有趣的解决方案可能是:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent intent = new Intent();
    switch (item.getItemId()) {
        case R.id.action_refresh:
            intent.setClass(this, UpdateService.class);
            break;
        case R.id.notes:
            intent.setClass(this, Physics.class);
            break;
        case R.id.cloud:
            intent = null;           
            break
        case R.id.imageee:
            // TODO set intent class
            break;
        case R.id.pdfff:
            // TODO set intent class
            break;
     }
// If the selected item is the one that opens the submenu does not try to start the 
// activity avoiding throwing null pointer exception and consequently opens the submenu
     if (!(intent == null))  
         startActivity(intent);
     return super.onOptionsItemSelected(item);
}

这样,您就不必多次(在所有情况下)对该方法的相同调用。

startActivity()

节省代码行。如果您决定将更多项目添加到菜单中,将更加有利。