Использование ListView: как добавить представление заголовка?

Я смотрю API ListView и я увидел метод:

addHeaderView (View v)

Что я хочу сделать, так это иметь макет над списком, возможно ли это?

Я попытался сделать что-то вроде:

  EditText et=new EditText(this);
  et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));
  et.setInputType(InputType.TYPE_CLASS_TEXT); 
  addHeaderView(et); //makes app crash

Я также пробовал

setContentView(R.layout.tryview);

но это также приведет к сбою приложения.

Помощь очень ценится!

Изменить. Код для этого класса:

public class GroupsActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String your_array_contents[] = {"a","ab","c"};
  setListAdapter(new ArrayAdapter<String>(this, R.layout.groups_layout, your_array_contents));
  EditText et=new EditText(this);
  et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  et.setInputType(InputType.TYPE_CLASS_TEXT); 

  ListView lv = getListView();
  lv.setTextFilterEnabled(true);
  lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this,
    android.R.layout.simple_list_item_multiple_choice, your_array_contents));
    lv.addHeaderView(et); //makes app crash
  lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
      // When clicked, show a toast with the TextView text
     // Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
          //Toast.LENGTH_SHORT).show();
    }
  });
}


}

Ответ 1

Вы просто не можете использовать View в качестве заголовка ListView.

Поскольку просматриваемое представление должно быть завышено.

Посмотрите мой ответ на Android ListView addHeaderView() nullPointerException для предопределенных просмотров для получения дополнительной информации.

EDIT:

Посмотрите на этот учебник Android ListView и ListActivity - Учебник.

EDIT 2: эта ссылка не работает Android ListActivity с верхним или нижним колонтитулом

Ответ 2

Вы можете добавить столько заголовков, сколько хотите, вызвав addHeaderView() несколько раз. Вы должны сделать это, прежде чем устанавливать адаптер в список.

И да, вы можете добавить заголовок примерно так:

LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup)inflater.inflate(R.layout.header, myListView, false);
myListView.addHeaderView(header, null, false);

Ответ 3

Я обнаружил, что раздувать заголовок как:

inflater.inflate(R.layout.listheader, container, false);

будучи контейнером Fragment ViewGroup, раздувает представление заголовка с помощью LayoutParam, который расширяется от FragmentLayout, но ListView ожидает, что вместо него будет AbsListView.LayoutParams.

Итак, моя проблема была решена путем надувания представления заголовка с передачей списка в виде контейнера:

ListView list = fragmentview.findViewById(R.id.listview);
View headerView = inflater.inflate(R.layout.listheader, list, false);

затем

list.addHeaderView(headerView, null, false);

Вроде поздний ответ, но я надеюсь, что это может кому-то помочь