有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有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”来环绕这个


共 (3) 个答案

  1. # 1 楼答案

    我怀疑你的问题与Android有关,只是不知道如何处理这种设计所暗示的两个级别的“可滚动性”。想想看——如果用户拖动标题,Android怎么知道他们是想滚动外部列表还是标题内的列表?我记得Romain Guy也说过同样的观点,把ListView放在ScrollView里面,这有点毫无意义

    可能的情况是,Android使标题足够大,可以简单地显示一个标题列表项,并且它假设用户的任何拖动动作都应该应用于外部列表

    一般来说,我认为你所描述的听起来像是一个糟糕的设计选择,你需要后退一步

    你希望这个UI在功能上做什么

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

  2. # 2 楼答案

    制作一个垂直方向的线性布局,并在那里添加两个列表视图。那会治好你的呃逆。 干杯

  3. # 3 楼答案

    你必须告诉父视图如何堆叠元素。这对父母来说是必要的,就像线性布局一样。如果你要有这样一个适配器,你需要有一个父级来包含这些东西,除非它是一个单一的视图

    更新

    Whenever you want to do processing with the views in a ListView you need to create a custom adapter that will handle your logic implementation and pass that information to the views as necessary.

    A custom adater would inflate the views piece by piece, this can be dynamic of fixed.