2013-07-08 39 views
1

我正在开发一个安卓应用程序Sliding MenuActionBar Sherlock我迷路了。我无法打开滑动菜单

我跟着这Spanish tutorial将它们添加到我的项目。

这是我的代码:

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity; 

import android.os.Bundle; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.view.View; 

public class MainActivity extends SlidingFragmentActivity 
{ 
    /** 
    * Used as TAG on Log messages. 
    */ 
    public static final String TAG = "MainActivity"; 
    private SlidingMenu menu; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Generate keys to encrypt and decrypt user password. 
     generateCryptoKeys(); 

     setBehindContentView(R.layout.menu); 

     setSlidingActionBarEnabled(false);   

     menu = new SlidingMenu(this); 
     menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 
     menu.setShadowWidthRes(R.dimen.shadow_width); 
     menu.setShadowDrawable(R.drawable.shadow); 
     menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); 
     menu.setFadeDegree(0.35f); 
     menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT); 

     getSupportActionBar().setDisplayShowCustomEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
} 

这是菜单片段:

public class MenuFragment extends ListFragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.menu_list, null); 
    } 

    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     SampleAdapter adapter = new SampleAdapter(getActivity()); 
     for (int i = 0; i < 20; i++) { 
      adapter.add(new SampleItem("Sample List", android.R.drawable.ic_menu_search)); 
     } 
     setListAdapter(adapter); 
    } 

    private class SampleItem { 
     public String tag; 
     public int iconRes; 
     public SampleItem(String tag, int iconRes) { 
      this.tag = tag; 
      this.iconRes = iconRes; 
     } 
    } 

    public class SampleAdapter extends ArrayAdapter<SampleItem> { 

     public SampleAdapter(Context context) { 
      super(context, 0); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = LayoutInflater.from(getContext()).inflate(R.layout.menu_row, null); 
      } 
      ImageView icon = (ImageView) convertView.findViewById(R.id.row_icon); 
      icon.setImageResource(getItem(position).iconRes); 
      TextView title = (TextView) convertView.findViewById(R.id.row_title); 
      title.setText(getItem(position).tag); 

      return convertView; 
     } 
    } 
} 

我有几个问题:

1.我必须使用片段?
2.为什么我点击主页按钮后无法打开菜单?
看到如下图所示:

enter image description here

要操作栏福尔摩斯与滑动菜单集成我已经做到了这一点:

Go into the SlidingActivities that you plan on using make them extend Sherlock___Activity instead of ___Activity. 

而且,当我做到这一点:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     toggle(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

我得到这个错误:

Cannot override the final method from SherlockFragmentActivity

回答

2
  1. Do I have to use fragments?

是,该库是专为它。另外,没有两个Activity可以同时在前台。

2 . Why I can't open the menu when I click on home button?

这是因为该按钮不打算打开滑动菜单。

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

将启用应用程序图标作为后退按钮。这从堆栈返回。另见Navigation。你的slindermenu是一个片段,放在你的活动一侧,因此它们在同一时刻存在,因此不会与任何导航无关。

要打开菜单,你需要调用:

SlidingMenu sm = getSlidingMenu(); 
    sm.toggle();//or .open(); 

,如果你想覆盖onOptionsItemSelected,您需要:

extends SlidingFragmentActivity 

修改滑动菜单库。所有的碎片都从sherlock库相关的碎片中延伸出来。 (顺便说一句,这是写在docs设置与ActionBarSherlock。)。

+0

谢谢你的回答,但是:我需要做些什么才能打开菜单? – VansFannel

+0

如果我这样做:'public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item)',我可以打开滑动菜单。 – VansFannel

3

使用财产以后这样的:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     menu.toggle(); 

     return true; 
    } 
+0

我不能那样做。我尝试过,但我得到这个错误:'不能覆盖从SherlockFragmentActivity'最后的方法。 – VansFannel

+0

在你的导入中,删除导入的“menu”并替换为:'com.actionbarsherlock.view。*。'你可能导入了错误的包 – marshallino16