【问题标题】:I can't open Sliding menu我无法打开滑动菜单
【发布时间】:2013-07-08 15:04:31
【问题描述】:

我正在使用 Sliding MenuActionBar Sherlock 开发一个 Android 应用程序,我迷路了。

我已按照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. 为什么我点击home键打不开菜单?
见下图:

为了将 Action Bar Sherlock 与滑动菜单集成,我已经这样做了:

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.

【问题讨论】:

    标签: android actionbarsherlock slidingmenu android-sliding


    【解决方案1】:

    使用类似的东西:

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

    【讨论】:

    • 我做不到。我试过了,但我得到了这个错误:Cannot override the final method from SherlockFragmentActivity.
    • 在您的导入中,删除“menu”的导入并替换为:com.actionbarsherlock.view.*. you may have import wrong package
    【解决方案2】:
    1. 我必须使用片段吗?

    是的,图书馆就是为它而建的。另外,不能有两个Activity同时在前台。

    2 。为什么我点击home键时打不开菜单?

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

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    

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

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

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

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

    extends SlidingFragmentActivity
    

    修改滑动菜单库。让所有片段都从 sherlock 库相关片段扩展。 (顺便说一句,这写在 Setup with ActionBarSherlock 下的 docs 中。

    【讨论】:

    • 感谢您的回答,但是:我必须做什么才能打开菜单?
    • 如果我这样做:public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item),我可以打开滑动菜单。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多