Вопрос по android – Как отобразить панель «Неопределенный прогресс» при нажатии кнопки «Обновить» в ActionBarSherlock?

12

Как показатьIndeterminate ProgressBar когдаRefresh кнопка нажата вActionBarSherlock и снова показывать кнопку «Обновить» при обновлении ViewGroup?

Update 1: У меня есть ответ, который является неполным. Я ставлю награду на вопрос, чтобы больше разработчиков могли помочь найти хороший ответ, который может пригодиться другим в будущем.

Как мы можем показатьIndeterminate ProgressBar который выглядит так, как показано на рисунке нижеenter image description here

Похоже, у вас был вопрос, на который @anadobes ответил на ваше удовлетворение (и который вы должны принять). Теперь у вас есть другой, независимый вопрос, который вы должны задать как новый вопрос, а не как редактирование этого. Если вам понравилась награда за новый вопрос, вы можете пометить этот вопрос, объяснить ситуацию, и мод может вернуть его вам. blahdiblah
Я создал решение для другого ответа, если вы заинтересованы в:stackoverflow.com/a/14360958/492624 Marek Sebera
@Bostone Немного подробнее о вашем комментарии. Gaurav Agarwal
Я думаю, что редактирование достаточно близко, что не требует нового вопроса. Но, в будущем, пожалуйста, попробуйте включить такую информациюwhen asking the original question, Иногда у нас возникают проблемы с пользователями, пытающимися повторно использовать существующие вопросы, чтобы задавать новые, что недопустимо. Will
Почему это в первую очередь? Это не соответствует текущим шаблонам проектирования. Bostone

Ваш Ответ

3   ответа
2

Вот полный код:

private static final int menuItemIdRefresh = 10; //class constant
private boolean refresh;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem refreshItem = menu.add(0, menuItemIdRefresh, 0,
            getString(R.string.action_refresh)).setShowAsActionFlags(
            MenuItem.SHOW_AS_ACTION_ALWAYS);

    if (isRefreshing) {
        refreshItem.setActionView(R.layout.indeterminate_progress);
    } else {
        refreshItem.setActionView(null);
        refreshItem.setIcon(R.drawable.ic_refresh);
    }

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case menuItemIdRefresh: {
            //the user has pressed the refresh button
        if (!isRefreshing) {
            isRefreshing = true;
            new RefreshMyViewAsyncTask().execute("");
        }
    }
        break;

    default:
        break;
    }

    return false;
}

И последнее замечание: для того, чтобы приведенный выше код работал, вам также необходимо вызвать supportInvalidateOptionsMenu (). Вы можете добавить это к методу onPreExecute () RefreshMyViewAsyncTask.

Надеюсь, это кому-нибудь поможет.

31

Похоже, что ActionBarSherlock не предоставляет конкретного метода для анимации обновленного MenuItem.

Что вы можете сделать (используя классический Android-API), это использоватьsetActionView(int resId) метод и дать идентификатор макета с ProgressBar в нем.

В начале действия по обновлению просто позвоните:

item.setActionView(R.layout.refresh_menuitem);

И когда ваше действие по обновлению закончено, позвоните:

item.setActionView(null);

Вот пример того, что ваш файл макетаrefresh_menuitem.xml могу иметь :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:addStatesFromChildren="true"
              android:focusable="true"
              android:paddingLeft="4dp"
              android:paddingRight="4dp"
              android:gravity="center"
              style="?attr/actionButtonStyle">
    <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="true"
            style="@android:style/Widget.ProgressBar.Small"/>
</LinearLayout> 
Ну, когда я пытаюсь использовать приведенный выше код,ProgressBar появляется в левой частиActionBar и список навигации блесны становится невидимым. Есть ли у вас идеи о том, как разместить этоProgressBar в том же месте, что иMenuItem?
+1 Хорошо, это работает. Можем ли мы изменить то, как прогрессбар выглядит на ICS? Gaurav Agarwal
установите стиль ProgressBar на «@android: style / Widget.Holo.ProgressBar.Small & quot;
Я обновил вопрос, пожалуйста, посмотрите на него. Gaurav Agarwal
У меня та же проблема, что и выше, jaibatrik, вы когда-нибудь нашли ответ на это?
10

ActionBarSherlock object: (фактически проще другого, но прогрессбар показан отдельно, а не надMenuItem)

1 - Поместите эту строку в метод onCreate () перед вызовом setContentView ():

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

- & GT; В этой строке указывается, что вы будете использовать неопределенную функцию ProgressBar.

2 - Включить неопределенный ProgressBar, вызвав:

setSupportProgressBarIndeterminateVisibility(true);

3 - отключить неопределенный ProgressBar, вызвав:

setSupportProgressBarIndeterminateVisibility(false);

Примечание: посмотрите в папке с примерами папки ActionBarSherlock. Я нашел этот код в следующем файле: JakeWharton-ActionBarSherlock-9598f2b\samples\demos\src\com\actionbarsherlock\sample\demos\IndeterminateProgress.java

Я смотрю на объединение двух, т.е. есть неопределенный бар стиля ICS в MenuItem. Gaurav Agarwal

Похожие вопросы