Search in sources :

Example 41 with END

use of android.support.v7.widget.helper.ItemTouchHelper.END in project wigle-wifi-wardriving by wiglenet.

the class MainActivity method setupMenuDrawer.

private void setupMenuDrawer() {
    // set up drawer menu
    final String[] menuTitles = new String[] { getString(R.string.tab_list), getString(R.string.tab_map), getString(R.string.tab_dash), getString(R.string.tab_data), getString(R.string.tab_news), getString(R.string.tab_rank), getString(R.string.tab_stats), getString(R.string.tab_uploads), getString(R.string.menu_settings), getString(R.string.menu_exit) };
    final int[] menuIcons = new int[] { android.R.drawable.ic_menu_sort_by_size, android.R.drawable.ic_menu_mapmode, android.R.drawable.ic_menu_directions, android.R.drawable.ic_menu_save, android.R.drawable.ic_menu_agenda, android.R.drawable.ic_menu_sort_alphabetically, android.R.drawable.ic_menu_today, android.R.drawable.ic_menu_upload, android.R.drawable.ic_menu_preferences, android.R.drawable.ic_delete };
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, R.id.drawer_list_text, menuTitles) {

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
            View view;
            if (convertView == null) {
                view = inflater.inflate(R.layout.drawer_list_item, parent, false);
            } else {
                view = convertView;
            }
            final TextView text = (TextView) view.findViewById(R.id.drawer_list_text);
            text.setText(menuTitles[position]);
            // If that's the Exit button, set the background to red
            if (position == EXIT_TAB_POS) {
                view.setBackgroundColor(Color.argb(200, 70, 0, 0));
            } else {
                view.setBackgroundColor(0);
            }
            final ImageView image = (ImageView) view.findViewById(R.id.drawer_list_icon);
            image.setImageResource(menuIcons[position]);
            return view;
        }
    });
    // Set the list's click listener
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
    mDrawerLayout, /* DrawerLayout object */
    R.string.drawer_open, /* "open drawer" description */
    R.string.drawer_close) {

        /* "close drawer" description */
        /**
         * Called when a drawer has settled in a completely closed state.
         */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
        }

        /**
         * Called when a drawer has settled in a completely open state.
         */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            final ActionBar actionBar = getSupportActionBar();
            if (actionBar != null)
                actionBar.setTitle("Menu");
        }
    };
    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    final ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }
// end drawer setup
}
Also used : ViewGroup(android.view.ViewGroup) ActionBarDrawerToggle(android.support.v7.app.ActionBarDrawerToggle) ImageView(android.widget.ImageView) View(android.view.View) AdapterView(android.widget.AdapterView) TextView(android.widget.TextView) ListView(android.widget.ListView) SuppressLint(android.annotation.SuppressLint) LayoutInflater(android.view.LayoutInflater) TextView(android.widget.TextView) ImageView(android.widget.ImageView) ActionBar(android.support.v7.app.ActionBar)

Example 42 with END

use of android.support.v7.widget.helper.ItemTouchHelper.END in project packages_apps_AicpExtras by AICP.

the class ChangelogActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Fabric.with(this, new Crashlytics());
    setContentView(R.layout.changelog_activity);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle(R.string.changelog_name);
    setSupportActionBar(toolbar);
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.changelog);
    recyclerView.setHasFixedSize(true);
    ArrayList<ChangelogItem> changeLogArray = new ArrayList<>();
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy", Locale.ENGLISH);
        Date date;
        Date nowDate = new Date();
        BufferedReader reader = new BufferedReader(new FileReader(CHANGELOG_PATH));
        String line;
        String directory = "";
        String commits = "";
        boolean checknext = false;
        while ((line = reader.readLine()) != null) {
            if (!line.matches("={20}") && !Objects.equals(line.trim(), "")) {
                if (line.matches("     (\\d\\d\\-\\d\\d\\-\\d{4})")) {
                    // it's date
                    date = sdf.parse(line.trim());
                    long now = nowDate.getTime();
                    long time = date.getTime();
                    final long diff = now - time;
                    String timeString;
                    if (diff < 1000 * 60 * 60 * 24) {
                        timeString = "Today";
                    } else if (diff < 1000 * 60 * 60 * 24 * 2) {
                        timeString = "Yesterday";
                    } else if (diff < 1000 * 60 * 60 * 24 * 3) {
                        timeString = "Two days ago";
                    } else if (diff < 1000 * 60 * 60 * 24 * 4) {
                        timeString = "Three days ago";
                    } else if (diff < 1000 * 60 * 60 * 24 * 5) {
                        timeString = "Four days ago";
                    } else if (diff < 1000 * 60 * 60 * 24 * 6) {
                        timeString = "Five days ago";
                    } else if (diff < 1000 * 60 * 60 * 24 * 7) {
                        timeString = "Six days ago";
                    } else if (diff < 1000 * 60 * 60 * 24 * 14) {
                        timeString = "A week ago";
                    } else if (diff < 1000 * 60 * 60 * 24 * 21) {
                        timeString = "Two weeks ago";
                    } else if (diff < 1000L * 60 * 60 * 24 * 28) {
                        timeString = "Three weeks ago";
                    } else {
                        timeString = line.trim().replaceAll("-", "/");
                    }
                    changeLogArray.add(new ChangelogItem(timeString));
                } else if (line.matches("^\\s*(   \\* )\\S*")) {
                    // it's directory
                    if (checknext) {
                        // remove lf on end
                        commits = commits.substring(0, commits.lastIndexOf("\n\n"));
                        changeLogArray.add(new ChangelogItem(directory, commits));
                        // reset commits
                        commits = "";
                        checknext = false;
                    } else {
                        checknext = true;
                        commits = "";
                    }
                    directory = line.replaceAll("(   \\* )", "");
                } else {
                    final String re = "^([a-f0-9]{1,12}) ";
                    line = line.replaceFirst(re, "");
                    commits += line + "\n\n";
                    checknext = true;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    ChangeLogAdapter adapter = new ChangeLogAdapter(this, changeLogArray);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
Also used : ArrayList(java.util.ArrayList) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) Date(java.util.Date) BufferedReader(java.io.BufferedReader) RecyclerView(android.support.v7.widget.RecyclerView) FileReader(java.io.FileReader) SimpleDateFormat(java.text.SimpleDateFormat) Toolbar(android.support.v7.widget.Toolbar)

Example 43 with END

use of android.support.v7.widget.helper.ItemTouchHelper.END in project actor-platform by actorapp.

the class CustomItemAnimator method endAnimation.

@Override
public void endAnimation(ViewHolder item) {
    final View view = item.itemView;
    // this will trigger end callback which should set properties to their target values.
    ViewCompat.animate(view).cancel();
    // TODO if some other animations are chained to end, how do we cancel them as well?
    for (int i = mPendingMoves.size() - 1; i >= 0; i--) {
        MoveInfo moveInfo = mPendingMoves.get(i);
        if (moveInfo.holder == item) {
            ViewCompat.setTranslationY(view, 0);
            ViewCompat.setTranslationX(view, 0);
            dispatchMoveFinished(item);
            mPendingMoves.remove(i);
        }
    }
    endChangeAnimation(mPendingChanges, item);
    if (mPendingRemovals.remove(item)) {
        ViewCompat.setAlpha(view, 1);
        dispatchRemoveFinished(item);
    }
    if (mPendingAdditions.remove(item)) {
        ViewCompat.setAlpha(view, 1);
        dispatchAddFinished(item);
    }
    for (int i = mChangesList.size() - 1; i >= 0; i--) {
        ArrayList<ChangeInfo> changes = mChangesList.get(i);
        endChangeAnimation(changes, item);
        if (changes.isEmpty()) {
            mChangesList.remove(i);
        }
    }
    for (int i = mMovesList.size() - 1; i >= 0; i--) {
        ArrayList<MoveInfo> moves = mMovesList.get(i);
        for (int j = moves.size() - 1; j >= 0; j--) {
            MoveInfo moveInfo = moves.get(j);
            if (moveInfo.holder == item) {
                ViewCompat.setTranslationY(view, 0);
                ViewCompat.setTranslationX(view, 0);
                dispatchMoveFinished(item);
                moves.remove(j);
                if (moves.isEmpty()) {
                    mMovesList.remove(i);
                }
                break;
            }
        }
    }
    for (int i = mAdditionsList.size() - 1; i >= 0; i--) {
        ArrayList<ViewHolder> additions = mAdditionsList.get(i);
        if (additions.remove(item)) {
            ViewCompat.setAlpha(view, 1);
            dispatchAddFinished(item);
            if (additions.isEmpty()) {
                mAdditionsList.remove(i);
            }
        }
    }
    // noinspection PointlessBooleanExpression,ConstantConditions
    if (mRemoveAnimations.remove(item) && DEBUG) {
        throw new IllegalStateException("after animation is cancelled, item should not be in " + "mRemoveAnimations list");
    }
    // noinspection PointlessBooleanExpression,ConstantConditions
    if (mAddAnimations.remove(item) && DEBUG) {
        throw new IllegalStateException("after animation is cancelled, item should not be in " + "mAddAnimations list");
    }
    // noinspection PointlessBooleanExpression,ConstantConditions
    if (mChangeAnimations.remove(item) && DEBUG) {
        throw new IllegalStateException("after animation is cancelled, item should not be in " + "mChangeAnimations list");
    }
    // noinspection PointlessBooleanExpression,ConstantConditions
    if (mMoveAnimations.remove(item) && DEBUG) {
        throw new IllegalStateException("after animation is cancelled, item should not be in " + "mMoveAnimations list");
    }
    dispatchFinishedWhenDone();
}
Also used : AnimatorViewHolder(im.actor.sdk.controllers.fragment.AnimatorViewHolder) ViewHolder(android.support.v7.widget.RecyclerView.ViewHolder) View(android.view.View)

Example 44 with END

use of android.support.v7.widget.helper.ItemTouchHelper.END in project iosched by google.

the class MyIOAdapter method setItems.

void setItems(List<ScheduleItem> items) {
    List<Object> newData = new ArrayList<>();
    MessageData notSignedInCard = MessageCardHelper.notSignedInCard();
    notSignedInCard.setStartButtonClickListener(new OnClickListener() {

        @Override
        public void onClick(final View view) {
            WelcomeUtils.markHidePostOnboardingCard(mContext);
        }
    });
    notSignedInCard.setEndButtonClickListener(new OnClickListener() {

        @Override
        public void onClick(final View view) {
            WelcomeUtils.markHidePostOnboardingCard(mContext);
            ((MyIOActivity) mContext).signIn();
        }
    });
    MessageData signedInMessageCard = MessageCardHelper.signedInMessageCard();
    signedInMessageCard.setStartButtonClickListener(new OnClickListener() {

        @Override
        public void onClick(final View view) {
            WelcomeUtils.markHidePostOnboardingCard(mContext);
        }
    });
    if (WelcomeUtils.showPostOnboardingCard(mContext)) {
        if (AccountUtils.hasActiveAccount(mContext)) {
            newData.add(signedInMessageCard);
        } else {
            newData.add(notSignedInCard);
        }
    }
    int day = 0;
    if (items != null && !items.isEmpty()) {
        // Add the items to our list, interleaving separators as we go
        long separatorTime = DAY_SEPARATORS.get(day).mStartTime;
        for (ScheduleItem item : items) {
            if (item.startTime >= separatorTime) {
                // add the separator first
                newData.add(new SeparatorSpacer());
                newData.add(DAY_SEPARATORS.get(day));
                day++;
                if (day >= DAY_SEPARATORS.size()) {
                    // run the list to the end
                    separatorTime = Long.MAX_VALUE;
                } else {
                    separatorTime = DAY_SEPARATORS.get(day).mStartTime;
                }
            }
            // Add the item
            newData.add(item);
        }
    }
    // Add any remaining separators
    for (; day < DAY_SEPARATORS.size(); day++) {
        newData.add(new SeparatorSpacer());
        newData.add(DAY_SEPARATORS.get(day));
    }
    DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new MyIoDiff(mItems, newData));
    mItems.clear();
    mItems.addAll(newData);
    diff.dispatchUpdatesTo(this);
}
Also used : ScheduleItem(com.google.samples.apps.iosched.model.ScheduleItem) MessageData(com.google.samples.apps.iosched.messages.MessageData) ArrayList(java.util.ArrayList) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) DiffUtil(android.support.v7.util.DiffUtil) OnClickListener(android.view.View.OnClickListener)

Example 45 with END

use of android.support.v7.widget.helper.ItemTouchHelper.END in project android-parallax-recyclerview by kanytu.

the class HeaderLayoutManagerFixed method onLayoutChildren.

/**
 * {@inheritDoc}
 */
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
    // create render state
    if (DEBUG) {
        Log.d(TAG, "is pre layout:" + state.isPreLayout());
    }
    if (mPendingSavedState != null) {
        setOrientation(mPendingSavedState.mOrientation);
        setReverseLayout(mPendingSavedState.mReverseLayout);
        setStackFromEnd(mPendingSavedState.mStackFromEnd);
        mPendingScrollPosition = mPendingSavedState.mAnchorPosition;
    }
    ensureRenderState();
    // resolve layout direction
    resolveShouldLayoutReverse();
    // validate scroll position if exists
    if (mPendingScrollPosition != RecyclerView.NO_POSITION) {
        // validate it
        if (mPendingScrollPosition < 0 || mPendingScrollPosition >= state.getItemCount()) {
            mPendingScrollPosition = RecyclerView.NO_POSITION;
            mPendingScrollPositionOffset = INVALID_OFFSET;
            if (DEBUG) {
                Log.e(TAG, "ignoring invalid scroll position " + mPendingScrollPosition);
            }
        }
    }
    // this value might be updated if there is a target scroll position without an offset
    boolean layoutFromEnd = mShouldReverseLayout ^ mStackFromEnd;
    final boolean stackFromEndChanged = mLastStackFromEnd != mStackFromEnd;
    int anchorCoordinate, anchorItemPosition;
    if (mPendingScrollPosition != RecyclerView.NO_POSITION) {
        // if child is visible, try to make it a reference child and ensure it is fully visible.
        // if child is not visible, align it depending on its virtual position.
        anchorItemPosition = mPendingScrollPosition;
        if (mPendingSavedState != null) {
            // Anchor offset depends on how that child was laid out. Here, we update it
            // according to our current view bounds
            layoutFromEnd = mPendingSavedState.mAnchorLayoutFromEnd;
            if (layoutFromEnd) {
                anchorCoordinate = mOrientationHelper.getEndAfterPadding() - mPendingSavedState.mAnchorOffset;
            } else {
                anchorCoordinate = mOrientationHelper.getStartAfterPadding() + mPendingSavedState.mAnchorOffset;
            }
        } else if (mPendingScrollPositionOffset == INVALID_OFFSET) {
            View child = findViewByPosition(mPendingScrollPosition);
            if (child != null) {
                final int startGap = mOrientationHelper.getDecoratedStart(child) - mOrientationHelper.getStartAfterPadding();
                final int endGap = mOrientationHelper.getEndAfterPadding() - mOrientationHelper.getDecoratedEnd(child);
                final int childSize = mOrientationHelper.getDecoratedMeasurement(child);
                if (childSize > mOrientationHelper.getTotalSpace()) {
                    // item does not fit. fix depending on layout direction
                    anchorCoordinate = layoutFromEnd ? mOrientationHelper.getEndAfterPadding() : mOrientationHelper.getStartAfterPadding();
                } else if (startGap < 0) {
                    anchorCoordinate = mOrientationHelper.getStartAfterPadding();
                    layoutFromEnd = false;
                } else if (endGap < 0) {
                    anchorCoordinate = mOrientationHelper.getEndAfterPadding();
                    layoutFromEnd = true;
                } else {
                    anchorCoordinate = layoutFromEnd ? mOrientationHelper.getDecoratedEnd(child) : mOrientationHelper.getDecoratedStart(child);
                }
            } else {
                // item is not visible.
                if (getChildCount() > 0) {
                    // get position of any child, does not matter
                    int pos = getPosition(getChildAt(0));
                    if (mPendingScrollPosition < pos == mShouldReverseLayout) {
                        anchorCoordinate = mOrientationHelper.getEndAfterPadding();
                        layoutFromEnd = true;
                    } else {
                        anchorCoordinate = mOrientationHelper.getStartAfterPadding();
                        layoutFromEnd = false;
                    }
                } else {
                    anchorCoordinate = layoutFromEnd ? mOrientationHelper.getEndAfterPadding() : mOrientationHelper.getStartAfterPadding();
                }
            }
        } else {
            // override layout from end values for consistency
            if (mShouldReverseLayout) {
                anchorCoordinate = mOrientationHelper.getEndAfterPadding() - mPendingScrollPositionOffset;
                layoutFromEnd = true;
            } else {
                anchorCoordinate = mOrientationHelper.getStartAfterPadding() + mPendingScrollPositionOffset;
                layoutFromEnd = false;
            }
        }
    } else if (getChildCount() > 0 && !stackFromEndChanged) {
        if (layoutFromEnd) {
            View referenceChild = getChildClosestToEnd();
            anchorCoordinate = mOrientationHelper.getDecoratedEnd(referenceChild);
            anchorItemPosition = getPosition(referenceChild);
        } else {
            View referenceChild = getChildClosestToStart();
            anchorCoordinate = mOrientationHelper.getDecoratedStart(referenceChild);
            anchorItemPosition = getPosition(referenceChild);
        }
    } else {
        anchorCoordinate = layoutFromEnd ? mOrientationHelper.getEndAfterPadding() : mOrientationHelper.getStartAfterPadding();
        anchorItemPosition = mStackFromEnd ? state.getItemCount() - 1 : 0;
    }
    detachAndScrapAttachedViews(recycler);
    final int extraForStart;
    final int extraForEnd;
    final int extra = getExtraLayoutSpace(state);
    boolean before = state.getTargetScrollPosition() < anchorItemPosition;
    if (before == mShouldReverseLayout) {
        extraForEnd = extra;
        extraForStart = 0;
    } else {
        extraForStart = extra;
        extraForEnd = 0;
    }
    // first fill towards start
    updateRenderStateToFillStart(anchorItemPosition, anchorCoordinate);
    mRenderState.mExtra = extraForStart;
    if (!layoutFromEnd) {
        mRenderState.mCurrentPosition += mRenderState.mItemDirection;
    }
    fill(recycler, mRenderState, state, false);
    int startOffset = mRenderState.mOffset;
    // fill towards end
    updateRenderStateToFillEnd(anchorItemPosition, anchorCoordinate);
    mRenderState.mExtra = extraForEnd;
    if (layoutFromEnd) {
        mRenderState.mCurrentPosition += mRenderState.mItemDirection;
    }
    fill(recycler, mRenderState, state, false);
    int endOffset = mRenderState.mOffset;
    // changes may cause gaps on the UI, try to fix them.
    if (getChildCount() > 0) {
        // find which side we should check for gaps.
        if (mShouldReverseLayout ^ mStackFromEnd) {
            int fixOffset = fixLayoutEndGap(endOffset, recycler, state, true);
            startOffset += fixOffset;
            endOffset += fixOffset;
            fixOffset = fixLayoutStartGap(startOffset, recycler, state, false);
            startOffset += fixOffset;
            endOffset += fixOffset;
        } else {
            int fixOffset = fixLayoutStartGap(startOffset, recycler, state, true);
            startOffset += fixOffset;
            endOffset += fixOffset;
            fixOffset = fixLayoutEndGap(endOffset, recycler, state, false);
            startOffset += fixOffset;
            endOffset += fixOffset;
        }
    }
    // another view out of bounds.
    if (getChildCount() > 0 && !state.isPreLayout() && supportsPredictiveItemAnimations()) {
        // to make the logic simpler, we calculate the size of children and call fill.
        int scrapExtraStart = 0, scrapExtraEnd = 0;
        final List<RecyclerView.ViewHolder> scrapList = recycler.getScrapList();
        final int scrapSize = scrapList.size();
        final int firstChildPos = getPosition(getChildAt(0));
        for (int i = 0; i < scrapSize; i++) {
            RecyclerView.ViewHolder scrap = scrapList.get(i);
            final int position = scrap.getPosition();
            final int direction = position < firstChildPos != mShouldReverseLayout ? RenderState.LAYOUT_START : RenderState.LAYOUT_END;
            if (direction == RenderState.LAYOUT_START) {
                scrapExtraStart += mOrientationHelper.getDecoratedMeasurement(scrap.itemView);
            } else {
                scrapExtraEnd += mOrientationHelper.getDecoratedMeasurement(scrap.itemView);
            }
        }
        if (DEBUG) {
            Log.d(TAG, "for unused scrap, decided to add " + scrapExtraStart + " towards start and " + scrapExtraEnd + " towards end");
        }
        mRenderState.mScrapList = scrapList;
        if (scrapExtraStart > 0) {
            View anchor = getChildClosestToStart();
            updateRenderStateToFillStart(getPosition(anchor), startOffset);
            mRenderState.mExtra = scrapExtraStart;
            mRenderState.mAvailable = 0;
            mRenderState.mCurrentPosition += mShouldReverseLayout ? 1 : -1;
            fill(recycler, mRenderState, state, false);
        }
        if (scrapExtraEnd > 0) {
            View anchor = getChildClosestToEnd();
            updateRenderStateToFillEnd(getPosition(anchor), endOffset);
            mRenderState.mExtra = scrapExtraEnd;
            mRenderState.mAvailable = 0;
            mRenderState.mCurrentPosition += mShouldReverseLayout ? -1 : 1;
            fill(recycler, mRenderState, state, false);
        }
        mRenderState.mScrapList = null;
    }
    mPendingScrollPosition = RecyclerView.NO_POSITION;
    mPendingScrollPositionOffset = INVALID_OFFSET;
    mLastStackFromEnd = mStackFromEnd;
    // we don't need this anymore
    mPendingSavedState = null;
    if (DEBUG) {
        validateChildOrder();
    }
}
Also used : RecyclerView(android.support.v7.widget.RecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) View(android.view.View)

Aggregations

View (android.view.View)129 RecyclerView (android.support.v7.widget.RecyclerView)113 TextView (android.widget.TextView)35 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)25 ImageView (android.widget.ImageView)20 ArrayList (java.util.ArrayList)19 SuppressLint (android.annotation.SuppressLint)15 Intent (android.content.Intent)15 ViewGroup (android.view.ViewGroup)13 DialogInterface (android.content.DialogInterface)12 PreferenceScreen (android.support.v7.preference.PreferenceScreen)11 Toolbar (android.support.v7.widget.Toolbar)11 AdapterView (android.widget.AdapterView)11 OrientationHelperEx (com.alibaba.android.vlayout.OrientationHelperEx)10 List (java.util.List)10 AlertDialog (android.support.v7.app.AlertDialog)9 Context (android.content.Context)8 ActionBar (android.support.v7.app.ActionBar)8 ListView (android.widget.ListView)8 VirtualLayoutManager (com.alibaba.android.vlayout.VirtualLayoutManager)8