导航抽屉与Foursquare相同

时间:2014-07-29 03:02:12

标签: android facebook navigation

我想制作一个与foursquare导航栏相同的导航栏。

以下是该示例的链接: http://www.patterns.nikosaurier.me/image/75794965381

在进入我的应用程序之前,用户需要在Facebook上登录。当他点击导航栏时,打开包含选项列表和照片的栏。

任何人都可以帮我吗?

THS。

1 个答案:

答案 0 :(得分:0)

您似乎是初学者,ListView支持多种布局,因此您可以创建一个ListView来做到这一点。看到图像,ListView必须有两个视图,一个是用户的图像,另一个是应用程序的菜单(根据需要,您可以setVisibility在菜单通知上)。

使用不同的布局创建ListView时,您必须覆盖

  1. getViewTypeCount() - >它会返回View
  2. AdapterView类型的数量
  3. getItemViewType(int) - >返回您尝试引用的View类型。
  4. 代码段:

    创建一个界面,以便我们知道我们正在使用的视图,例如:

    public interface ViewInterface {
        public int getType();
    }
    

    使用此界面扩展所有类,以便您可以知道它是什么类型的视图: 对于此示例,我们有HeaderViewContentView

    public class HeaderView implements ViewInterface{
    
        public static final int HEADER_VIEW = 0;
        String title;
    
        public StayHeader create(String title){
            HeaderView header = new HeaderView();
            header.setTitle(title);
            return header;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        @Override
        public int getType() {
            return HEADER_VIEW;
        }
    }
    
    
    public class ContentView implements ViewInterface{
    
        public static final int CONTENT_VIEW = 1;
    
        String content;
    
        public ContentView create(String highlight){
            ContentView contents = new ContentView();
            contents.setHighlight(highlight);
            return highlights;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        @Override
        public int getType() {
            return CONTENT_VIEW;
        }
    }
    

    此处的create()方法用于实例化这些视图的数据。

    您的Adapter现在应该是这样的:

    public class DrawerAdapter extends ArrayAdapter<ViewInterface>{
    
        Context context;
        LayoutInflater inflater;
        ViewInterface[] views;
    
        final int VIEW_TYPE_COUNT = 2;
    
        public StayEatDetailsAdapter(Context context, ViewInterface[] views, int layout) {
            super(context, layout, views);
            this.context = context;
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            this.views = views;
        }
    
        @Override
        public ViewInterface getItem(int position) {
            return views[position];
        }
    
        @Override
        public int getCount() {
            return views.length;
        }
    
        @Override
        public int getViewTypeCount() {
            return VIEW_TYPE_COUNT;
        }
    
        @Override
        public int getItemViewType(int position) {
            return getItem(position).getType();
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = null;
            ViewInterface typeView = getItem(position);
            // Initialize view according to interface's view type
            if(typeView.getType() == HeaderView.HEADER_VIEW){
                view = getHeaderView(convertView, parent, typeView);
            }
            else if(typeView.getType() == ContentView.CONTENT_VIEW) {
                view = getContentView(convertView, parent, typeView);
            }
            return view;
        }
    
        public View getHeaderView (View convertView, ViewGroup parent, ViewInterface typeView) {
            HeaderView headers = (HeaderView) typeView;
            HeaderItems headerItems = null;
    
            if(convertView == null) {
                convertView = inflater.inflate(R.layout.card_stay_eat_header, parent, false);
                headerItems = new HeaderItems();
                headerItems.header = (TextView) convertView.findViewById(R.id.header);
                convertView.setTag(headerItems);
            }
            if(headerItems == null) {
                headerItems = (HeaderItems) convertView.getTag();
            }
    
            headerItems.header.setText(headers.getTitle());
            return convertView;
        }
    
        public View getContentView (View convertView, ViewGroup parent, ViewInterface typeView) {
            ContentView contentItems = (ContentView) typeView;
            ContentItems contents = null;
    
            if(convertView == null) {
                convertView = inflater.inflate(R.layout.card_stay_eat_highlights, parent, false);
                contents = new ContentItems();
                contents.content = (TextView) convertView.findViewById(R.id.highlights);
                convertView.setTag(highlight);
            }
    
            if(contentItems == null) {
                contentItems = (ContentView) convertView.getTag();
            }
    
            contents.content.setText(highlights.getHighlight());
    
            return convertView;
        }
    
        //View holder pattern for our view contents in the listview
        private class HeaderItems {
            TextView header;
        }
    
        private class ContentItems {
            TextView content;
        }
    
    }
    

    最后初始化Adapter并将其设置为ListView

    ViewInterface views = new ViewInterface[2];
        views[1] = new HeaderView().create("Header");
        views[2] = new ContentView().create("Content");
        DrawerAdapter adapter = new StayEatDetailsAdapter(getApplicationContext(), views, layout);
        list.setAdapter(adapter);
    

    这是一种方法,另一种方法是直接制作xml布局,而不是使用ListView,如下所示:

    <DrawerLayout
        ...>
        <LinearLayout
            ...
            gravity="start">
            <!-- your views here -->
        </LinearLayout>
    </DrawerLayout>
    

    希望这会有所帮助:)

    供参考:See this cool article : ListView :),this以及this