Android - ListView中的标题消失了吗?

时间:2011-09-19 05:59:24

标签: android listview header android-fragments

我最近一直在经历一个非常奇怪的错误...而且根本不知道该怎么做......

我有一个“Tabbed-Fragment-Activity”,这意味着我需要底部的tabhost,所以我使用google的API示例,它通过TabHost(& Manager)管理片段 几乎每个选项卡实际上都是一个ListFragment,每个我在“OnActivityCreated”添加一个标题。

现在奇怪的是:当我第一次移动到标签(ListFragment)时,我可以看到标题,但是一旦我从标签移动然后移回标签,标题就会消失!!! / p>

这是我正在使用的代码:

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”(否则你会得到一个令人讨厌的异常,说你在设置适配器后无法添加标题... )

Errr ......我在这一点上毫无头绪......

请帮助:)

1 个答案:

答案 0 :(得分:2)

使用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;
   }
}