5

我想启用我的片段中的主页按钮。这个问题在前面问过,但是对于一个活动。
我想...启用主页按钮ActionbarSherlock,Sherlockfragment

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

回答

13

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

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

我不认为你可以在事只有extends SherlockFragmentgetSupportActionBar

+0

是啊!它的工作你刚刚救了我的一天:P! – user1534326 2012-07-23 17:46:31

+4

但'SherlockFragment'确实允许你调用'getSherlockActivity()。getSupportActionBar()'。 – 2013-01-25 21:25:14

25

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

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

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

+0

但它给了“getSupportActionbar(0)” – user1534326 2012-07-23 17:37:07

+1

一个errot ...然后说,在您原来的职位。尝试将其更改为'getSherlockActivity()。getSupportActionBar()'。 – Eric 2012-07-23 17:38:13

+0

感谢您的回答,但mattdonders已经给出了正确的答案。 – user1534326 2012-07-23 17:47:03

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说:

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