簡體   English   中英

如何在 ListFragment 中調用 addHeaderView?

[英]How to call addHeaderView in ListFragment?

在 Fragment 中將 headerView 設置為 ListView 是否正確? 我有一些片段(見下面的代碼)。 在這個片段中,我填充了 ListView。 但我不知道在哪里可以調用 addHeaderView。 有誰能夠幫我?

public class FeedsListForViewFragment extends ListFragment {

    private Context mContext;
    List<FeedItem> items;
    private int layoutForList = R.layout.list_feeds_simple;
    private ActiveRecordBase _db;
    private Activity mActivity;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = getActivity();
        _db = ((JtjApplication)getActivity().getApplication()).getDatabase();
        try {
            _db.open();
        } catch (ActiveRecordException e) {
            e.printStackTrace();
        }          

    }

    public void setItemsToList(List<FeedItem> items, int curPosition) {
        mContext = getActivity().getApplicationContext();
        this.items = items;
        ListView lv = getListView();
        setListAdapter(new ListOfFeedsAdapter(mContext, layoutForList, items, mActivity));
        lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        lv.setCacheColorHint(Color.WHITE);

        setPosition(curPosition);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        if (!(((FeedsActivity) getActivity()).getCurrentPosition() == position)) {
            updateUnreadItemsInDb(position);

            updateLinksList(position, items.get(position));
            ((FeedsActivity) getActivity()).setCurrentPosition(position);
        }
    }

    @SuppressWarnings("unchecked")
    private void updateUnreadItemsInDb(int position) {
        FeedItem feed = items.get(position);
        if (feed.isRead != true) {
            List<FeedItem> feedsForUpdate = null;
            List<FeedType> lft = null;
            try {
                feedsForUpdate = _db.find(FeedItem.class, false, "GUID=?", new String[] { String.valueOf(feed.guid) }, null, null, "PUBLICATIONDATE DESC", null);
                lft = _db.findAll(FeedType.class);
            } catch (ActiveRecordException e1) {
                e1.printStackTrace();
            }
            for (FeedItem curFeed:feedsForUpdate) {
                curFeed.isRead = true;
                try {
                    curFeed.save();
                    FeedType ft = lft.get(Integer.parseInt(curFeed.channel_id) - 1);
                    ft.unread_count = ft.unread_count - 1;
                    ft.update();
                } catch (ActiveRecordException e) {
                    e.printStackTrace();
                }
            }
            items.get(position).isRead = true;
            ((ArrayAdapter<FeedItem>) getListView().getAdapter()).notifyDataSetChanged();
        }
    }

    private void setPosition(int position) {
        ListView lv = getListView();
        lv.setSelection(position);
        lv.setItemChecked(position, true);       
        try{
            updateLinksList(position, items.get(position));
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }
    }

    private void updateLinksList(int position, FeedItem feedItem) {
        FeedsViewFragment viewFragment = (FeedsViewFragment) getFragmentManager().findFragmentById(R.id.feed_view_fragment);
        viewFragment.setViewItem(feedItem);
    }
}

您可以在以下之間調用addHeaderView()

ListView lv = getListView();

和:

setListAdapter(new ListOfFeedsAdapter(mContext, layoutForList, items, mActivity));

現在,我還沒有在 ListFragment 上嘗試過ListFragment View ,所以雖然它應該可以工作,但由於某種原因它有可能不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM