带有ListView头的java ListView
在我的listview(go go redundancy)中添加listview作为标题时,我遇到了一个问题。代码正在运行,但是只有第一项显示在标题中。身体看起来很好
listView = (ListView) findViewById(R.id.default_list_view);
header = (ListView) getLayoutInflater().inflate(R.layout.savings_overview_header_list, null, false);
HeaderAdapter hAdapter = new HeaderAdapter(getLayoutInflater());
hAdapter.addItem("1");
hAdapter.addItem("2");
hAdapter.addItem("3");
header.setAdapter(hAdapter);
for (Policy p : saving.getPolicies()) {
adapter.addItem(p);
}
listView.addHeaderView(header);
listView.setAdapter(adapter);
headerView:
<ListView xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:id="@+id/default_list_view"
安卓:layout_width="fill_parent"
安卓:layout_height="fill_parent"
安卓:cacheColorHint="#00000000"
安卓:divider="@drawable/list_divider"
安卓:dividerHeight="2px"
安卓:fadingEdge="none"
安卓:fitsSystemWindows="true"
安卓:footerDividersEnabled="false"
安卓:headerDividersEnabled="false"
安卓:listSelector="@drawable/list_item_background_selected"
>
</ListView>
我尝试过将ListView包装成垂直线性布局,但也没有:(
hAdapter
private static class HeaderAdapter extends BaseAdapter {
private final LayoutInflater inflater;
protected ArrayList<String> data = new ArrayList<String>();
public HeaderAdapter(LayoutInflater inflater) {
this.inflater = inflater;
}
public void addItem(String s) {
data.add(s);
}
public View getView(int position, View convertView, ViewGroup parent) {
final PolicyViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.savings_overview_header_item, parent, false);
holder = new PolicyViewHolder();
holder.header = (TextView) convertView.findViewById(R.id.list_item_header);
holder.subHeader = (TextView) convertView.findViewById(R.id.list_item_subheader);
holder.img = (ImageView) convertView.findViewById(R.id.list_item_img);
convertView.setTag(holder);
} else {
holder = (PolicyViewHolder) convertView.getTag();
}
String s = data.get(position);
holder.header.setText(s);
holder.subHeader.setText(s);
holder.img.setImageResId(R.drawable.test);
return convertView;
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return data.get(position);
}
public long getItemId(int position) {
return position;
}
private static class PolicyViewHolder {
TextView header;
TextView subHeader;
ImageView img;
}
}
标题项目
<RelativeLayout
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:paddingLeft="10dp"
安卓:paddingRight="10dp" >
<ImageView
安卓:id="@+id/list_item_img"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_centerVertical="true"
安卓:src="@drawable/ic_launcher"/>
<LinearLayout
安卓:layout_width="fill_parent"
安卓:layout_height="wrap_content"
安卓:layout_centerVertical="true"
安卓:layout_marginRight="10dp"
安卓:layout_marginLeft="5dp"
安卓:layout_toLeftOf="@+id/list_item_value"
安卓:layout_toRightOf="@+id/header_image"
安卓:orientation="vertical" >
<TextView
安卓:id="@+id/list_item_header"
style="@style/header_list_header"
安卓:layout_width="fill_parent"
安卓:layout_height="wrap_content" />
<TextView
安卓:id="@+id/list_item_subheader"
style="@style/list_header_sub_header"
安卓:layout_width="fill_parent"
安卓:layout_height="wrap_content"
安卓:text="sub header" />
</LinearLayout>
</RelativeLayout>
我也尝试过用linearlayout=“vertical”来环绕这个
# 1 楼答案
我怀疑你的问题与Android有关,只是不知道如何处理这种设计所暗示的两个级别的“可滚动性”。想想看——如果用户拖动标题,Android怎么知道他们是想滚动外部列表还是标题内的列表?我记得Romain Guy也说过同样的观点,把
ListView
放在ScrollView
里面,这有点毫无意义可能的情况是,Android使标题足够大,可以简单地显示一个标题列表项,并且它假设用户的任何拖动动作都应该应用于外部列表
一般来说,我认为你所描述的听起来像是一个糟糕的设计选择,你需要后退一步
你希望这个UI在功能上做什么
如果只是想在一个列表中显示两组内容,那么这是您需要在所使用的}
ListAdapter
实现中解决的问题。e、 g.看看Jeff Sharkey's blog post on his ^{# 2 楼答案
制作一个垂直方向的线性布局,并在那里添加两个列表视图。那会治好你的呃逆。 干杯
# 3 楼答案
你必须告诉父视图如何堆叠元素。这对父母来说是必要的,就像线性布局一样。如果你要有这样一个适配器,你需要有一个父级来包含这些东西,除非它是一个单一的视图
更新