Android - Заголовок в ListView исчезает? - PullRequest
1 голос
/ 19 сентября 2011

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

У меня есть "Tabbed-Fragment-Activity", что означает, что мне нужно былоtabhost в нижней части, поэтому я использовал пример API Google, который управляет фрагментами через TabHost (& Manager). Почти каждая вкладка на самом деле представляет собой ListFragment, и к каждой я добавляю заголовок в «OnActivityCreated».

Теперь странная вещьэто: Когда я в первый раз перехожу на вкладку (ListFragment), я вижу заголовок, но как только я перехожу с вкладки и затем возвращаюсь к ней, заголовок УТВЕРЖДЕН !!!

Этокод, который я использую:

private boolean initialized = false;
private TextView m_Header = null; 


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    String listTitle = "HELLO HUMAN"
    if(m_Header == null && !Helpers.isNullOrBlank(listTitle))
    {
        m_Header = (TextView)inflater.inflate(R.layout.newslist_header, null, false);
        m_Header.setText(listTitle);
    }


    return super.onCreateView(inflater, container, savedInstanceState);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if(!initialized)
    {
        ListView list = getListView();
        if(m_Header != null)
        {
            list.addHeaderView(m_Header);
        }

        this.m_adapter = new SomeAdapter();
        setListAdapter(this.m_adapter);     
        registerForContextMenu(list);
        this.initialized = true;
    }

}

Я использую это "инициализированное" логическое значение, чтобы не вызывать "setListAdapter" / "addHeader" каждый раз, когда я загружаю фрагмент (в противном случае вы получаете неприятное исключение, говорящееВы не можете добавить заголовок после установки адаптера ...)

Э-э-э-э ... я не в курсе @ этот момент ...

пожалуйста, помогите:)

1 Ответ

2 голосов
/ 19 октября 2011

Использовать систему типографского представления в BaseAdapter.Использование addHeaderView() оборачивает ваш адаптер и добавляет ненужную сложность, которая вам не нужна для одного View.Метод getItemViewType(int) позволяет различать типы View в зависимости от положения в адаптере.В вашем методе getView() вы можете проверить, соответствует ли позиция заголовку.Например:

public class YourAdapter extends BaseAdapter {
   private static final int HEADER = 0;
   private static final int CELL   = 1;

   @Override public int getItemViewType(int position) {
      if (position == 0) {
         return HEADER;
      }
      return CELL;
   }

   @Override public int getViewTypeCount() {
      return 2;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
      if (getItemViewType(position) == HEADER) {
         // do header stuff...
         return yourHeaderView;
      }

      // do non header stuff...
      return yourNonHeaderView;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...