0

その間、ナビゲーションが機能しない理由がわかりません。私のメインメニューには、さまざまなアクティビティに切り替えるための 2 つのアイコンがあります: 検索と設定です。しかし、検索をクリックするたびに、settingsActivity が開かれます。検索の ID を確認したところ、マニフェストにアクティビティが入力されています...

ビューにボタンを追加して searchActivity を開始しようとすると、すべて正常に動作します。しかし、ケースR.id.settingsMenu-thingをコメントアウトしていても、検索記号をクリックするとsettingsActivityが開かれます...何かアイデアはありますか? :( 前もって感謝します!

MainActivity.java

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.mainmenu, menu);
    return super.onCreateOptionsMenu(menu);
     }

public boolean onOptionsItemSelected(MenuItem item){
        Intent intent = null;

        switch(item.getItemId()){

        case android.R.id.home:
            intent = new Intent(this,MainActivity.class);
            startActivity(intent);
            break;

        case R.id.searchMenu:
            intent = new Intent(this,SearchActivity.class);
            startActivity(intent);
            break;

        case R.id.settingsMenu:
            intent = new Intent(this,SettingsActivity.class);
            startActivity(intent);
            break;

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

マニフェスト.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.anothertest"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:debuggable="true">
        <activity
            android:name="android.app.ui.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="android.app.ui.SearchActivity" android:label="@string/search"></activity>
        <activity android:name="android.app.ui.SettingsActivity" android:label="@string/settings"></activity>
        <activity android:name="android.app.ui.NoArticleInListActivity"></activity>
    </application>

</manifest>

メインメニュー.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item 
        android:id="@+id/searchMenu"
        android:title="@string/search"
        android:icon="@android:drawable/ic_menu_search"
        android:orderInCategory="1"
        android:showAsAction="always">
        </item>

    <item
        android:id="@+id/settingsMenu"
        android:orderInCategory="2"
        android:showAsAction="always"
        android:title="@string/action_settings"
        android:icon="@android:drawable/ic_menu_preferences">
        </item>

</menu>

編集

設定フラグメント

public class SettingsFragment extends PreferenceFragment{

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

設定アクティビティ

public class SettingsActivity extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
    }

    protected void onStart(){
        super.onStart();
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId()){
        case android.R.id.home:
            Intent intent = new Intent(this,MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

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

設定.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory 
        android:title="@string/settingsSummaryCalendar">
        android:key="pref_calendar_settings">
        <CheckBoxPreference
            android:key="prefArticleAsCalendarEntry"
            android:summary="@string/settingsSummaryCalendarEntry"
            android:title="@string/settingCreateEntryForEach"
            android:defaultValue="true"/>
        <CheckBoxPreference 
            android:key="prefCreateOwnCalendar"
            android:summary="@string/settingsSummaryCalendar"
            android:title="@string/settingCreateOwnCalendar"
            android:defaultValue="true"/>
    </PreferenceCategory>

    <PreferenceCategory 
        android:title="@string/settingsSummaryNotification">
        android:key="pref_notification_settings">
        <CheckBoxPreference
            android:key="prefNotification"
            android:summary="@string/settingsSummaryNotification"
            android:title="@string/settingsNotification"
            android:defaultValue="true" >
        </CheckBoxPreference>
        <ListPreference 
            android:key="prefNotificationTime"
            android:entries="@array/notificationTime"
            android:entryValues="@array/notificationTimeValues"
            android:summary="@string/settingsSummaryNotificationTime"
            android:title="@string/settingsNotificationTime"
            android:defaultValue="@string/settingsNotificationTime_default" 
            android:dependency="prefNotification">
        </ListPreference>
    </PreferenceCategory>
</PreferenceScreen>
4

1 に答える 1

0

唯一の可能性は、Eclipse が要素の ID をめちゃくちゃにしているということです。これは、ADT ではなく SDK を更新した後に発生しました。だから、ここに提案があります:

1- プロジェクトのクリーンアップを試みます。Eclipse では、 Project-> Clean の下にあります。デバッグ ステートメントを使用して、クリックした要素の ID (R.id.settings、R.id.search) が、R.java

2- それが機能しない場合は、SDK を最新 (この投稿の時点で 22) に更新します。また、ADT を更新します。その方法については、この回答を確認してください: How can I update my ADT in Eclipse?

3- 最終手段: プロジェクトを削除し、再インポートします。

于 2013-06-08T11:34:25.867 に答える