NavigationDrawer+Fragment实现侧滑菜单效果

学习了NavigationDrawer 官方Support包中的SlidingMenu版本,练了下手.用到了ListView中item不同的布局

以后会升级加上ViewPager和GridView实现多页面图片切换

代码:

package com.light.study.android;

import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.light.study.android.MyListAdapter.RowType;

public class EventItem implements Item {

	private final String content;
	
	public EventItem(String content){
		this.content = content;
	}
	
	@Override
	public int getViewType() {
		return RowType.LIST_ITEM.ordinal();
	}

	@Override
	public View getView(LayoutInflater inflater, View convertView) {
		if(convertView==null){
			convertView = inflater.inflate(R.layout.list_item, null);
		}
		TextView tv = (TextView) convertView.findViewById(R.id.list_content);
		tv.setText(content);
		return convertView;
	}

	@Override
	public boolean isClickable() {
		return true;
	}

}

 

package com.light.study.android;

import com.light.study.android.MyListAdapter.RowType;

import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

public class HeaderItem implements Item {
    private String name;
    
    public HeaderItem(String name){
    	this.name = name;
    }
    
	@Override
	public int getViewType() {
		return RowType.HEAD_ITEM.ordinal();
	}

	@Override
	public View getView(LayoutInflater inflater, View convertView) {
		if(convertView==null){
			convertView = inflater.inflate(R.layout.head_item, null);
		}
		TextView tv = (TextView) convertView.findViewById(R.id.headerText);
		tv.setText(name);
		return convertView;
		
	}

	@Override
	public boolean isClickable() {
		return false;
	}

}

 

package com.light.study.android;

import android.view.LayoutInflater;
import android.view.View;

public interface Item {
    public int getViewType();
    public boolean isClickable();
    public View getView(LayoutInflater inflater, View convertView);
}

 

package com.light.study.android;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

public class MyListAdapter extends ArrayAdapter {
	private Context mContext;
	private LayoutInflater inflater;
	private List list;

	public MyListAdapter(Context context, List list) {
		super(context, 0, list);
		this.mContext = context;
		this.inflater = LayoutInflater.from(mContext);
		this.list = list;
	}
	
	public enum RowType{
		HEAD_ITEM,LIST_ITEM
	}
	
	 @Override 
	 public boolean isEnabled(int position) {  
	    return this.list.get(position).isClickable();  
	 }  


	
	@Override
	public int getViewTypeCount() {
		return RowType.values().length;
	}
	
	@Override
	public int getItemViewType(int position) {
		return list.get(position).getViewType();
	}
	
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		return list.get(position).getView(inflater, convertView);
	}

}

 

package com.light.study.android;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class PageFragment extends Fragment {
   public final static String ITEM_POSITION_NUMBER = "item_position_num";
   public PageFragment(){}
   @Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View convertView = inflater.inflate(R.layout.page_fragment_layout, null);
		TextView tv = (TextView) convertView.findViewById(R.id.textView);
		int num = getArguments().getInt(ITEM_POSITION_NUMBER);
		//選擇對應的項目
		String[] dynastyList = getResources().getStringArray(R.array.list_item);
		tv.setText(dynastyList[num]);
		return convertView;
	}
}

 

package com.light.study.android;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class MainActivity extends Activity {
	private DrawerLayout drawLayout;
	private ListView menuList;
	private ActionBarDrawerToggle toggle;
	private CharSequence mDrawerTitle;
	private String[] mMenuTitles;
	private String[] historyTitles;
	private String[] musicTitles; 
	private String[] movieTitles;
	private String[] listTitles;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
		initListener();
	    if (savedInstanceState == null) {
	            selectItem(0);
	    }
	}

	private void init() {
		mDrawerTitle = getTitle();
		//历史栏
		historyTitles = getResources().getStringArray(R.array.history);
		//音乐栏
		musicTitles = getResources().getStringArray(R.array.music);
		//电影栏
		movieTitles = getResources().getStringArray(R.array.movie);
		//标题数组
		mMenuTitles = getResources().getStringArray(R.array.title);
		//每一項的標題
		listTitles =  getResources().getStringArray(R.array.list_item);
		
		drawLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		menuList = (ListView) findViewById(R.id.left_menu);
		
		//设置菜单阴影效果
		drawLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
		List list = new ArrayList();
		//菜单加入历史标题和历史项
		HeaderItem historyHeader = new HeaderItem(mMenuTitles[0]);
		list.add(historyHeader);
		for(int i =0;i parent, View view, int position, long id) {
        	Log.i("Light", "position:"+position);
            selectItem(position);
        }
    }

    private void selectItem(int position) {
        // update the main content by replacing fragments
    	PageFragment fragment = new PageFragment();
        //将当前选择的项传递到Fragment
        Bundle args = new Bundle();
        args.putInt(PageFragment.ITEM_POSITION_NUMBER, position);
        fragment.setArguments(args);
        
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
        
        drawLayout.closeDrawer(menuList);
        // update selected item and title, then close the drawer
        menuList.setItemChecked(position, true);
        //注意这里改变的是ActionBar的标题
        getActionBar().setTitle(listTitles[position]);
    }
	
	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);
		toggle.syncState();
	}

    @Override
	public void onConfigurationChanged(Configuration newConfig) {
	     super.onConfigurationChanged(newConfig);
	     // Pass any configuration change to the drawer toggls
	     toggle.onConfigurationChanged(newConfig);
	}
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
         // The action bar home/up action should open or close the drawer.
         // ActionBarDrawerToggle will take care of this.
        if (toggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
}


activity_main.xml:



    
    
    
    
    
    


head_item.xml:



    
    



list_item.xml



    
    



page_fragment_layout.xml:



    
    


arrays.xml:



    
        三国
        楚汉
        春秋
        战国
    
     
        爵士
        古典
        现代
        民谣
    
     
        悬疑
        爱情
        历史
        恐怖
    
    
        历史
        音樂
        电影
    
    
        歷史
        三国
        楚汉
        春秋
        战国
        音樂
        爵士
        古典
        现代
        民谣
        電影
        悬疑
        爱情
        历史
        恐怖
    


效果:

NavigationDrawer+Fragment实现侧滑菜单效果_第1张图片


 

转载于:https://www.cnblogs.com/krislight1105/p/3748360.html

你可能感兴趣的:(NavigationDrawer+Fragment实现侧滑菜单效果)