2012-04-11 2 views
0

Я пытаюсь добавить заголовок к моему listView, но я вижу только черный экран, когда активность запускаетAndroid: AddHeader в ListView

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.maincoverflow); 

     final ListView itemslist = (ListView)findViewById(R.id.itemslist);   
     LayoutInflater inflater = getLayoutInflater(); 
     ViewGroup mTop = (ViewGroup)inflater.inflate(R.layout.main_header, itemslist, false); 
     itemslist.addHeaderView(mTop, null, false); 

     //some actions with header and list items 
     //example: coverflow_item_title is located in header(R.layout.main_header) 
     title = (TextView)findViewById(R.id.coverflow_item_title); //checked - is not null 

     CoverFlow coverFlow = (CoverFlow) findViewById(R.id.coverflow); 
     ImageAdapter coverImageAdapter = new ImageAdapter(this); 
     coverFlow.setAdapter(new ImageAdapter(this)); 
     coverImageAdapter.createImages(); 

     coverFlow.setAdapter(coverImageAdapter); 
     coverFlow.setOnItemSelectedListener(new CoverAdapterView.OnItemSelectedListener(){   
      ... 
      adapter = new LazyAdapter(MainCoverflowActivity.this, tools, tools_images); 
      itemslist.setAdapter(adapter); 
     } 

     itemslist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       ... 
     } 
} 

maincoverflow.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/itemslist" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </ListView> 

</LinearLayout> 

main_header.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/coverflow_item_title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <com.thumbsupstudio.mobitour.CoverFlow 
     android:id="@+id/coverflow" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <ImageView 
     android:id="@+id/shadowbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:src="@drawable/shadow_box" /> 

</LinearLayout> 

Вы можете заметить, что я использую Coverflow виджет (отсюда http://www.inter-fuser.com/2010/01/android-coverflow-widget.html) - он отлично работает.

В общем, я меняю listView, когда Coverflow вещь изменена. Он отлично работает, но мне нужно Coverflow, чтобы прокрутить его с помощью listView, поэтому я решил прикрепить его к заголовку. После этого на экране нет listView и Coverflow, все черное.

+0

Вы проверили свой адаптер после добавления заголовка? Когда вы добавляете заголовок, позиции предметов увеличиваются на 1 из-за заголовка. Надеюсь, это не испортит ваш список. – Shubhayu

+0

Вы попробовали файл hierarchyviewer, чтобы узнать, где находятся ваши позиции? – njzk2

+0

@Shubhayu Я устанавливаю адаптер списка после добавления заголовка. Я думаю, что если сдвиг номера позиции имеет место, и это имеет значение, тогда возникает некоторая ошибка, поэтому у меня есть только черный экран –

ответ

0

Я нашел решение. Я не совсем понимаю, почему, но:

НЕ ИЗМЕНИТЬ

init listView 
inflate header and add it to the list 
set list adapter in Coverflow onItemSelected handler (it launch automatically with item position=0) 

ПРАВИЛЬНО

init listView 
inflate header and add it to the list 
set any adapter to listView (!!!) 
set listView adapter in Coverflow onItemSelected handler (it launch automatically with item position=0) 

после активности запускает listView имеет содержание адаптера, который был установлен в Coverflow onItemSelected обработчика. Для чего первое назначение адаптера - я не понимаю.

+0

Я полностью забыл об этом вчера! До тех пор, пока вы не установите адаптер, список не будет сгенерирован. Вы создаете обложку и устанавливаете ее как заголовок, но настройка адаптера списка, содержащего заголовок покрытия, происходит только в onItemSelected(). Что в основном означает, что список никогда не создается в первую очередь! – Shubhayu

+0

да, теперь понятно –

0
try this 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<RelativeLayout 
     android:id="@+id/headerLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true"/> 
<TextView 
     android:id="@+id/coverflow_item_title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <com.thumbsupstudio.mobitour.CoverFlow 
     android:id="@+id/coverflow" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <ImageView 
     android:id="@+id/shadowbox" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:src="@drawable/shadow_box" /> 

</RelativeLayout> 


    <ListView 
     android:id="@+id/itemslist" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </ListView> 

</RelativeLayout> 
+1

. Я думаю, что проблема здесь заключается в том, чтобы прокрутка заголовка со списком. – njzk2

+0

да, мне тоже нужна прокрутка заголовка. Я думаю, что код не позволит это –