【问题标题】:Android - Header in ListView disappears?Android - ListView 中的标题消失了?
【发布时间】:2011-09-19 05:59:24
【问题描述】:

我最近遇到了一个非常奇怪的错误...根本不知道该怎么办...

我有一个“Tabbed-Fragment-Activity”,这意味着我需要在底部有一个 tabhost,所以我使用了 google 的 API 示例,它通过 TabHost(和管理器)管理片段 几乎每个选项卡实际上都是一个 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”(否则你会得到一个讨厌的异常,说你不能在设置适配器后添加标题...... )

Errr...我对此一无所知...

请帮忙:)

【问题讨论】:

    标签: android listview header android-fragments


    【解决方案1】:

    使用BaseAdapter 中的视图输入系统。使用addHeaderView() 会包装您的适配器并增加不必要的复杂性,而您不需要单个ViewgetItemViewType(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;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2018-02-07
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2016-05-01
      相关资源
      最近更新 更多