2012-01-21 5 views
0

У меня возникла проблема с добавлением listview в виде заголовка в моем списке (go go redundancy). Код работает, однако в заголовке отображается только первый элемент. Тело выглядит прекрасно.ListView с заголовком 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: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

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

<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 = «вертикальный» вокруг этого одного, а

+1

Вы должны показать, что внутри этого есть у HeadaAdapter. – JoxTraex

ответ

1

Вы должны сообщить родительскому представлению, как складывать ваши элементы. Это необходимо для родителей, таких как LinearLayout. Если у вас будет такой адаптер, у вас должен быть родитель, чтобы он содержал эти вещи, ЕСЛИ его единственный вид.

Update

Всякий раз, когда вы хотите сделать обработку с видом в ListView вы необходимо создать пользовательский адаптер, который будет обрабатывать вашу реализацию логики и передать эту информацию мнения, по мере необходимости.

Пользовательский adater раздувает взгляды по частям, это может быть динамика фиксированной.

+0

У меня есть уже родительский linearlayout с ориентацией = "vertical" – Flexo

+0

Опубликовать свой HeadAdapter – JoxTraex

+0

обновил его сейчас :) – Flexo

0

Сделать LinearLayout с вертикальной ориентацией и добавить как ListViews там. Это должно исправить вашу икоту. Cheers.

1

Я подозреваю, что ваша проблема связана с Android, просто не зная, как обращаться с двумя уровнями «прокрутки», которые подразумевает этот дизайн. Подумайте об этом - если пользователь перетаскивает заголовок, как Android должен знать, предназначены ли они для прокрутки внешнего списка или списка в заголовке? Я как-то вспоминаю Ромена Гая, который делает то же самое о размещении ListView s внутри ScrollView s, это немного бессмысленно.

Что может случиться, так это то, что Android делает заголовок достаточно большим, чтобы просто отображать один элемент списка заголовков, и он предполагает, что любой жест перетаскивания пользователем должен применяться к внешнему списку.

Как правило, я думаю, что то, что вы описали, звучит как плохой выбор дизайна, и вам нужно сделать шаг назад.

Что функционально вы хотите, чтобы этот пользовательский интерфейс выполнял?

Если вы хотите отображать два набора контента в одном списке, то это проблема, которую вы должны решить в рамках реализации ListAdapter, которую вы используете. например Посмотрите Jeff Sharkey's blog post on his SeparatedListAdapter.

Смежные вопросы