1

アクションバーに、クリックするとプログレスバーが表示される項目があります。ただし、ユーザーがプログレスバーをクリックすると、プログレスバーが停止し、通常の「更新」ボタンが再び表示されます。現在、プログレスバーはクリックできなくなります。これが私のコードです:

    case R.id.id_Refresh:;
        menuItem = item;
        if(btnRefreshPressed == true){
            menuItem.setActionView(R.layout.progressbar);
            menuItem.expandActionView();
            btnRefreshPressed = false;
            mUpdateMap.run();
            return true;
        }else if(btnRefreshPressed == false){
            menuItem.collapseActionView();
            menuItem.setActionView(null);
            mHandler.removeCallbacks(mUpdateMap);
            btnRefreshPressed = true;
            return true;
        }

プログレスバー.xml:

<?xml version="1.0" encoding="utf-8"?>
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/progressbar2"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:clickable="true" >
</ProgressBar>
4

2 に答える 2

3

独自の actionView を使用する場合は、ビュー自体のクリックを処理する必要があります。

menuItem.getActionView().setOnClickListener(...);

また、actionView を使用するモードと使用しないモードの 2 つのモードを使用する代わりに、viewSwitcher をactionViewとして使用し、必要なときにshowNext () を使用して切り替えることができます。


編集:アクションバー項目のクリックをサポートする最も簡単な方法として、actionView が含まれているかどうかに関係なく、次のコードを使用できます。

public static void setOnMenuItemSelected(final MenuItem menuItem, final Runnable runnable) {
    final View view = menuItem.getActionView();
    if (view != null)
        view.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(final View v) {
                runnable.run();
            }
        });
    else
        menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(final MenuItem item) {
                runnable.run();
                return true;
            }
        });
}
于 2013-08-13T13:55:58.123 に答える
1

ID を渡していません:

findViewById(com.example.androidbasic12.R.layout.progressbar);

そうであってはなりR.id.YourIDませんR.layout.progressbar 。そのため、NullPointerException が発生します。

于 2013-08-13T10:30:15.513 に答える