Good day, I am trying to implement jfeinstein slide menu with a ListView layout and ActionBarSherlock in my app and for some reason, i can't seem to get the implementation correctly on the SlideMenu. From my understanding, when using the SlideMenu library with ActionBarSherlock, you have to extend to SherlockActivity in the SlideMenu Activity you plan to use.
here is my implementation: i will post only the relevant code here.
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>
Adapter class:
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;
}
i am getting a blank screen in the slide Menu. What could i be doing wrong?
Try this code. It's working for me.
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);
}
}
Hope that helps, cheers!