我想制作一个与foursquare导航栏相同的导航栏。
以下是该示例的链接: http://www.patterns.nikosaurier.me/image/75794965381
在进入我的应用程序之前,用户需要在Facebook上登录。当他点击导航栏时,打开包含选项列表和照片的栏。
任何人都可以帮我吗?
THS。
答案 0 :(得分:0)
您似乎是初学者,ListView
支持多种布局,因此您可以创建一个ListView
来做到这一点。看到图像,ListView
必须有两个视图,一个是用户的图像,另一个是应用程序的菜单(根据需要,您可以setVisibility
在菜单通知上)。
使用不同的布局创建ListView
时,您必须覆盖
getViewTypeCount()
- >它会返回View
AdapterView
类型的数量
getItemViewType(int)
- >返回您尝试引用的View
类型。代码段:
创建一个界面,以便我们知道我们正在使用的视图,例如:
public interface ViewInterface {
public int getType();
}
使用此界面扩展所有类,以便您可以知道它是什么类型的视图:
对于此示例,我们有HeaderView
和ContentView
:
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。