【问题标题】:Menu options not working on Android 2.2 and 2.3.5菜单选项不适用于 Android 2.2 和 2.3.5
【发布时间】:2013-05-12 01:09:32
【问题描述】:

我在运行 2.2 和 2.3.5 的 Android 设备时遇到问题。版本。我一直在开发一个简单的应用程序,到目前为止我的任何代码都没有问题。自从我上次测试以来,菜单项已经停止加载其他活动/运行 Intents,我真的不知道为什么,因为我重新加载了 bin/gen 文件夹,重新构建了项目,清理了它,但没有雪茄!为了清楚起见,我在我的应用程序和 android 清单中包含了这些类。

包含应用导航意图的主 Activity

package rcahmw.prototype.crowdsnapcymru;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class CrowdSnapCymru extends Activity {

    MenuItem item;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_crowd_snap_cymru);
    }

    /**
     * Empty constructor for CrowdSnapCymru
     */
    public CrowdSnapCymru() {

    }

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

    public boolean onOptionsItemSelected(){
        switch(item.getItemId())
        {   
            case R.id.app_camera:
                Intent firstIntent = new Intent(this, SnapCamera.class);
                startActivity(firstIntent);
                return true;

            case R.id.app_dataentry:
                Intent secondIntent = new Intent(this, DataEntry.class);
                startActivity(secondIntent);
                return true;

            case R.id.app_upload:
                Intent thirdIntent = new Intent(this, UploadRecord.class);
                startActivity(thirdIntent);
                return true;

            case R.id.app_home:
                Intent fourthIntent = new Intent(this, ImageSelector.class);
                startActivity(fourthIntent);
                return true;

            case R.id.app_about:
                Intent fifthIntent = new Intent(this, CrowdSnapCymru.class);
                startActivity(fifthIntent);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

另一个使用原始意图代码的 Activity

package rcahmw.prototype.crowdsnapcymru;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class UploadRecord extends CrowdSnapCymru {

    MenuItem item;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload_record);
    }

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

    public void loadMenuResponses() {
        onOptionsItemSelected(item);
    }

}

ANDROID MANIFEST XML 文件和 ACTION_BAR XML 文件

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyTheme" >
    <activity
        android:name="rcahmw.prototype.crowdsnapcymru.CrowdSnapCymru"
        android:uiOptions="splitActionBarWhenNarrow" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="rcahmw.prototype.crowdsnapcymru.SnapCamera"
        android:uiOptions="splitActionBarWhenNarrow" >
    </activity>
    <activity
        android:name="rcahmw.prototype.crowdsnapcymru.DataEntry"
        android:uiOptions="splitActionBarWhenNarrow" >
    </activity>
    <activity
        android:name="rcahmw.prototype.crowdsnapcymru.UploadRecord"
        android:label="@string/title_activity_upload_record"
        android:uiOptions="splitActionBarWhenNarrow"  >
    </activity>
    <activity
        android:name="rcahmw.prototype.crowdsnapcymru.Login"
        android:label="@string/title_activity_login"
        android:windowSoftInputMode="adjustResize|stateVisible">        
    </activity>
    <activity
        android:name="rcahmw.prototype.crowdsnapcymru.ImageSelector"
        android:label="@string/title_activity_image_selector"
        android:uiOptions="splitActionBarWhenNarrow"  >
    </activity>
</application>

<?xml version="1.0" encoding="utf-8"?>

<item android:id="@+id/app_camera"
      android:title="@string/Camera"
      android:icon="@drawable/ic_camera" 
      android:showAsAction="ifRoom|withText" />

<item android:id="@+id/app_dataentry"
      android:title="@string/Edit"
      android:icon="@drawable/ic_edit"
      android:showAsAction="ifRoom|withText"/>

<item android:id="@+id/app_upload"
      android:title="@string/Upload"
      android:icon="@drawable/ic_upload"
      android:showAsAction="ifRoom|withText" />

<item android:id="@+id/app_about"
    android:title="@string/About"
    android:icon="@drawable/ic_about"
    android:showAsAction="ifRoom|withText" />

谁能找出问题所在?菜单按钮未加载预期的意图。干杯。

【问题讨论】:

    标签: java android xml android-activity


    【解决方案1】:

    你的onOptionsItemSelected() 应该覆盖

    @Override
    public boolean onOptionsItemSelected(Menu item){
    switch(item.getItemId())
    {   
        case R.id.app_camera:
            Intent firstIntent = new Intent(this, SnapCamera.class);
            startActivity(firstIntent);
            return true;
    
        case R.id.app_dataentry:
            Intent secondIntent = new Intent(this, DataEntry.class);
            startActivity(secondIntent);
            return true;
    
        case R.id.app_upload:
            Intent thirdIntent = new Intent(this, UploadRecord.class);
            startActivity(thirdIntent);
            return true;
    
        case R.id.app_home:
            Intent fourthIntent = new Intent(this, ImageSelector.class);
            startActivity(fourthIntent);
            return true;
    
        case R.id.app_about:
            Intent fifthIntent = new Intent(this, CrowdSnapCymru.class);
            startActivity(fifthIntent);
            return true;
    
        default:
            return super.onOptionsItemSelected(item);
    }
    }
    

    【讨论】:

      【解决方案2】:

      在 menu->menu.xml 中像这样使用

      而不是 android:showAsAction="ifRoom|withText",像这样使用。 android:showAsAction="always"

      希望它会起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多