5

我想在我的片段中启用主页按钮。这个问题在前面被问过,但只是针对一项活动。
我试过了 ...

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

...但这不起作用。
这是我的代码:

import com.actionbarsherlock.R;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.MenuItem;

import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

public class SafanTab extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.safantab, container, false);
    }

    public OnClickListener onOverClick = new OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), Over_Safan.class);
            startActivityForResult(myIntent, 0);
        }
    };

    public OnClickListener onProductenClick = new OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), Over_Safan.class);
            startActivityForResult(myIntent, 0);
        }
    };

    public OnClickListener onTwitterClick = new OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent myIntent = new Intent(view.getContext(), Over_Safan.class);
            startActivityForResult(myIntent, 0);
        }
    };

}

如何在 SherlockFragment 上启用主页按钮?

4

3 回答 3

25

您还需要覆盖选项菜单选择:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

请记住,上面的代码将在活动中运行(因此finish())。如果你不使用Activity(这对我来说很奇怪......),那么你需要替换它。

于 2012-07-23T17:35:11.733 回答
13

您是否尝试将以下代码添加到主要活动 - 那个extends SherlockActivityextends SherlockFragmentActivity

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

我不认为你可以getSupportActionBar只做一些事情extends SherlockFragment

于 2012-07-23T17:39:09.417 回答
0

最简单的解决方案是遵循以下三个简单步骤:

1 - 在AndroidManifestwhich 中声明您的活动的父项:

<activity android:theme="@style/Theme.MyApp"
            android:name="com.example.CurrentActivity" 
            android:parentActivityName="com.example.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.ParentActivity" />

2 - 在操作栏中添加向上图标,只需从您的onCreate方法调用:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

3 - 指定当用户按下向上按钮时要打开的活动:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

注意: 如果您致电(如@Eric 建议的那样):

finish();

代替:

NavUtils.navigateUpFromSameTask(this);

您并没有真正执行“向上导航”,因为正如文档所述:

向上导航不同于系统后退按钮提供的后退导航。Back 按钮用于按时间倒序浏览用户最近使用过的屏幕历史记录。它通常基于屏幕之间的时间关系,而不是应用程序的层次结构(这是向上导航的基础)。

于 2013-10-18T20:14:17.630 回答