27

私はActionBarSherlockを使用しています(それは重要ではないと思いますが)。

メインアクティビティとアバウトアクティビティがあります。Aboutアクティビティでロゴで後矢印を表示し、適切なアニメーションなどを実行してほしい。これを正しく行う方法がわかりません。

現在、onOptionsMenuItemSelectedの下で、[上へ/ホーム]ボタンが押されたときにメインアクティビティを起動しますが、これはハッキーで、実際には正しく機能しません。間違ったアニメーションを再生し、マルチタスクの処理が不十分です。

これを正しく設定するにはどうすればよいですか?

これが私のメインアクティビティの中でAboutを起動する部分です:

Intent aboutIntent = new Intent(MainActivity.this, About.class);
MainActivity.this.startActivity(aboutIntent);

これが私のAboutアクティビティです:

package com.stevenschoen.test;

import android.content.Intent;
import android.os.Bundle;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.MenuItem;

public class About extends SherlockActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.about);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case android.R.id.home:
                // app icon in action bar clicked; go home
                Intent intentHome = new Intent(this, MainActivity.class);
                intentHome.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intentHome);
                return true;

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

7 に答える 7

38

これも試してみましたか(AndroidのWebサイトから取得):

マニフェストで、メインアクティビティに移動する必要があるアクティビティXごとに、これをコードに追加します。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

そしてこれをそのマニフェストxmlタグに:

<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" />

メインアクティビティで同じ状態を維持する必要がある場合は、代わりに次のコードを使用してください。

Intent intent = NavUtils.getParentActivityIntent(this); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
NavUtils.navigateUpTo(this, intent);

APIが16以上の場合、メタデータの代わりにメインアクティビティへのパスを使用してparentActivityNameの属性を追加できます。

于 2013-11-30T23:03:39.450 に答える
14

私の問題の根本は、少し前に作成したマニフェストの変更であることがわかりました。次の行を追加しました。

android:launchMode="singleInstance"

だから私の主な活動は再開されませんでした。次のように変更します。

android:launchMode="singleTask"

私の問題を解決し、すべてのonOptionsItemSelectedものを取り除くことができました。私は何かが間違っていることを知っていました、Androidがこれをよりよく処理することができたはずでした、そして私は正しかったです。マニフェストを確認してください:P

于 2012-07-03T09:55:40.287 に答える
11

コードまたはXMLを使用してアクションバーボタンを処理できます。

このコードを確認してください

プログラムで必要な場合onCreate()メソッドにこの行を追加します

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

そして、このメソッドonSupportNavigateUp()をオーバーライドします

@Override
public boolean onSupportNavigateUp(){  
finish();  
return true;  
}

または非プログラム的に、マニフェストファイルにメタを次のように追加できます

<activity android:name="Current Activity"
        android:parentActivityName="Activity you want to open">
    </activity>

注:アクションバーがnullでないことを確認してください。

于 2016-06-08T03:31:13.857 に答える
10

あなたのonCreate(Bundle savedInstanceState)中で、

ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

次に、あなたの中onOptionsItemSelected(MenuItem item)で、

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // go to previous screen when app icon in action bar is clicked
            Intent intent = new Intent(this, PreviousActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
    }
    return super.onOptionsItemSelected(item);
}
于 2012-07-03T04:37:40.217 に答える
5

前のアクティビティに戻りたい場合は、これが最も簡単な解決策です。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish(); //this method close current activity and return to previous
            return true;
    }
    return super.onOptionsItemSelected(item);
}
于 2014-11-27T16:36:34.390 に答える
0
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings2);
    //here is to put the up back button in the Activity
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
// here is the code to handle to go back to the activity which sent you to this current one
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}
于 2021-01-23T18:00:30.533 に答える
-1

マニフェストファイルに表示されるandroid:minSdkVersion = "11"を確認してください。APK11からアップアイコンが含まれています。小さなサンプルplzを作成しました。以下のリンクを試して、作業スペースにインポートするのに役立つ場合があります。

http://www.mediafire.com/?hktdvts7yyduwv1

于 2013-10-21T10:21:37.457 に答える