启用主页按钮ActionbarSherlock,Sherlockfragment

时间:2012-07-23 17:24:36

标签: android android-fragments actionbarsherlock android-homebutton

我想启用片段中的主页按钮。这个问题早先提出,但是对于一项活动 我试过......

 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上启用主页按钮?

3 个答案:

答案 0 :(得分:25)

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

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

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

答案 1 :(得分:13)

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

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

我认为只有getSupportActionBar才能extends SherlockFragment {/ 1}}。

答案 2 :(得分:0)

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

1 - 在您的活动的父级AndroidManifest中声明:

<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);

你并没有真正表现出“向上导航”,因为documentation说:

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