Android 如何正确实施SlideMenu和ActionbarSherlock

Android 如何正确实施SlideMenu和ActionbarSherlock,android,actionbarsherlock,Android,Actionbarsherlock,您好,我正在尝试在我的应用程序中使用ListView布局和ActionBarSherlock实现jfeinstein幻灯片菜单,但由于某些原因,我似乎无法在幻灯片菜单上正确实现。根据我的理解,当使用带有ActionBarSherlock的SlideMenu库时,您必须在计划使用的SlideMenu活动中扩展到SherlockActivity 这是我的实现:我将只在这里发布相关代码 public class MyActivity extends SlidingFragmentActivity {

您好,我正在尝试在我的应用程序中使用ListView布局和ActionBarSherlock实现jfeinstein幻灯片菜单,但由于某些原因,我似乎无法在幻灯片菜单上正确实现。根据我的理解,当使用带有ActionBarSherlock的SlideMenu库时,您必须在计划使用的SlideMenu活动中扩展到SherlockActivity

这是我的实现:我将只在这里发布相关代码

 public class MyActivity extends SlidingFragmentActivity {
ListView slidinglist;
private SlidingAdapter SlidingAdapter;

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

          getSupportActionBar().setDisplayShowTitleEnabled(false);

            //Enable home button
            getSupportActionBar().setHomeButtonEnabled(true);

            //Home as up display
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

            /*get array from the slidemenu items in value folder */
            String[] text_items = getResources().getStringArray(R.array.sliding_menus);
            TypedArray imgs = getResources().obtainTypedArray(R.array.sliding_menu_images);

            final Context context=this;
            LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v=inflater.inflate(R.layout.menu_layout, null, true);

            slidinglist = (ListView)v.findViewById(R.id.slidemenu_listView);
            SlidingAdapter = new SlidingAdapter(this, R.layout.slide_menu_item, text_items, imgs);
            slidinglist.setAdapter(SlidingAdapter);

        SlidingMenu menu = new SlidingMenu(this);
        menu.setMode(SlidingMenu.LEFT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setFadeEnabled(true);
        menu.setFadeDegree(0.35f);
        menu.setBehindOffset(100);
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        //menu.setMenu(R.layout.menu_layout);
        menu.setMenu(v);


    }
menu_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/slidemenu_listView"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" >
    </ListView>


</LinearLayout>

适配器类:

public class SlidingAdapter extends ArrayAdapter<String> {
         Context mContext;
         private int ViewResourceId; 
         private String[] mstring;
         TypedArray icons;

        public SlidingAdapter(Context context, int resourceId, String[] items, TypedArray images ){
            super(context, resourceId, items);

            mContext = context;
            ViewResourceId = resourceId;
            mstring = items;
            icons = images;
        }

        @Override
        public int getCount(){
            Log.d(TAG, "lenght of string is" + mstring.length);
            return mstring.length;
        }

        @Override
        public String getItem(int position){
            return mstring[position];
        }

        @Override
        public long getItemId(int position){
            return position;
        }

        @Override
        public View getView (int position, View convertView, ViewGroup parent){
            ViewHolder holder;

            if(convertView == null){
                LayoutInflater inflater = LayoutInflater.from(mContext);
                convertView = inflater.inflate(ViewResourceId, null);
                holder = new ViewHolder();


              holder.imageview = (ImageView)convertView.findViewById(R.id.slidemenu_image_item);
              holder.text_title = (TextView)convertView.findViewById(R.id.slidemenu_textview_id);
              holder.arrowImageView = (ImageView)convertView.findViewById(R.id.slidemenu_arrow_id);

              convertView.setTag(holder);

            }
            else{
                holder = (ViewHolder)convertView.getTag();
            }

            //set Array text values defined in xml to textview
            String title = mstring[position];
            holder.text_title.setText(title);

            //set Array icons values defined in xml to textview
            holder.imageview.setImageDrawable(icons.getDrawable(position));

            return convertView;
        }


    }

     class ViewHolder {
        TextView text_title;
        ImageView imageview;
        ImageView arrowImageView;
    }
公共类SlidingAdapter扩展了ArrayAdapter{
语境;
私有int-ViewResourceId;
私有字符串[]mstring;
键入Darray图标;
公共幻灯片适配器(上下文上下文、int resourceId、字符串[]项、类型Darray图像){
超级(上下文、资源ID、项目);
mContext=上下文;
ViewResourceId=resourceId;
mstring=项目;
图标=图像;
}
@凌驾
public int getCount(){
Log.d(标记,“字符串长度为”+mstring.length);
返回mstring.length;
}
@凌驾
公共字符串getItem(int位置){
返回mstring[位置];
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
LayoutFlater充气机=LayoutFlater.from(mContext);
convertView=充气机。充气(ViewResourceId,null);
holder=新的ViewHolder();
holder.imageview=(imageview)convertView.findViewById(R.id.slidemenu\u image\u项);
holder.text\u title=(TextView)convertView.findViewById(R.id.slidemenu\u TextView\u id);
holder.arrowImageView=(ImageView)convertView.findViewById(R.id.slidemenu\u arrow\u id);
convertView.setTag(支架);
}
否则{
holder=(ViewHolder)convertView.getTag();
}
//将xml中定义的数组文本值设置为textview
字符串标题=mstring[位置];
holder.text_title.setText(title);
//将xml中定义的数组图标值设置为textview
holder.imageview.setImageDrawable(icons.getDrawable(位置));
返回视图;
}
}
类视图持有者{
文本查看文本标题;
图像视图图像视图;
图像视图箭头图像视图;
}

我在幻灯片菜单中看到一个空白屏幕。我可能做错了什么

试试这段代码。这对我有用

public class MainFragmentActivity extends SlidingFragmentActivity {

    private ActionBar ab;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_fragment);
        setBehindContentView(R.layout.side_menu);

        Display display = getWindowManager().getDefaultDisplay();
        final int width = display.getWidth();

        ListView mMenuLateral = (ListView) findViewById(R.id.menu_lateral);
        mMenuLateral.setAdapter(new MenuLateralAdapter(getApplicationContext(), vibraCallback));
        mMenuLateral.setDivider(getResources().getDrawable(R.color.divider));
        mMenuLateral.setSelector(android.R.color.transparent);
        mMenuLateral.setOnItemClickListener(new OnItemClickListener() {
             ...
        }

        ab = getSupportActionBar();
        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM|ActionBar.DISPLAY_SHOW_HOME); 
        ab.setCustomView(actionBarCustomView);
        ab.setIcon(R.drawable.action_bar_icon_main);
        ab.setHomeButtonEnabled(true);

        menu = getSlidingMenu();
        menu.setMode(SlidingMenu.LEFT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
        menu.setShadowWidth(35);
        menu.setShadowDrawable(R.drawable.shadow);
        menu.setBehindWidth(width * 3 / 4);
    }
}

希望有帮助,干杯

您好,您需要将您的活动扩展到Sherlock,然后实现滑动菜单

试试这个:


滑动适配器的填充是否正确?@AdriánRodríguez我想是的。我还将添加该代码。@AdriánRodríguez我已经添加了适配器代码。。但是看不出有什么问题是的,适配器可能不是问题所在。因为我没有看到任何错误,所以我会发布适合我的代码。谢谢你的代码。请告诉我你们的侧菜单和活动主片段的布局,以防万一。非常感谢!现在可以了。我唯一改变的两件事是menu=getSlidingMenu(),而不是我之前所做的,并删除了menu.attachToActivity(..),我还需要进一步了解原因。再次感谢。setContentView和setBehindContentView有什么不同?setContentView设置上面的视图,而setBehindContentView设置下面的视图。想象一下facebook应用程序,上面的视图是你的时间线,下面的视图是你点击左上角按钮时出现的菜单。