首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有ListView头的ListView

带有ListView头的ListView
EN

Stack Overflow用户
提问于 2012-01-21 14:01:36
回答 3查看 687关注 0票数 0

我在我的listview中添加一个listview作为标题时遇到了问题(go冗余)。代码正在工作,但是只有第一项出现在标题中。身体看起来很好。

代码语言:javascript
复制
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:

代码语言:javascript
复制
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/default_list_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:divider="@drawable/list_divider"
android:dividerHeight="2px"
android:fadingEdge="none"
android:fitsSystemWindows="true"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:listSelector="@drawable/list_item_background_selected" 
>
</ListView>

我试过用垂直的ListView包LinearLayout,但那里也没有雪茄:

hAdapter

代码语言:javascript
复制
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;
    }
}

header_item

代码语言:javascript
复制
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" >

    <ImageView 
        android:id="@+id/list_item_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_launcher"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="5dp"
        android:layout_toLeftOf="@+id/list_item_value"
        android:layout_toRightOf="@+id/header_image"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/list_item_header"
            style="@style/header_list_header"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/list_item_subheader"
            style="@style/list_header_sub_header"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="sub header" />
    </LinearLayout>

</RelativeLayout>

我也尝试过将linearlayout=“垂直”环绕在这一个上。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-21 14:10:42

您必须告诉父视图如何堆叠您的项目。对于像LinearLayout这样的父母来说,这是必要的。如果要拥有这样的适配器,则需要有一个父类来包含这些内容,除非它是一个单一视图。

更新

每当您想要处理ListView中的视图时,您都需要创建一个自定义适配器,该适配器将处理您的逻辑实现,并在必要时将该信息传递给视图。

自定义广告器会一点一点地膨胀视图,这可以是动态的.。

票数 1
EN

Stack Overflow用户

发布于 2012-01-22 20:31:07

我怀疑您的问题与Android有关,根本不知道如何处理这个设计所暗示的两个级别的“滚动性”。想想看--如果用户拖着头,Android怎么知道他们是想滚动外部列表还是在标题中滚动列表呢?我记得Romain曾说过将ListViews放在ScrollViews中,这有点毫无意义。

可能发生的情况是,Android使标题足够大,只需显示单个标题列表项,并且它假定用户的任何拖动姿态都应该应用于外部列表。

一般来说,我认为您所描述的设计选择听起来很糟糕,您需要后退一步。

从功能上讲,您希望这个UI做什么?

如果您只是想在一个列表中显示两组内容,那么在您使用的ListAdapter实现中需要解决这个问题。看一看Jeff Sharkey's blog post on his SeparatedListAdapter

票数 1
EN

Stack Overflow用户

发布于 2012-01-21 14:06:30

制作一个垂直方向的LinearLayout,并在那里添加两个ListViews。这应该能治好你的打嗝。干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8953542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档