Android:点击后更改操作栏图标,并在onCreate()之后将其更改回来

时间:2012-09-19 19:56:20

标签: java android android-layout android-actionbar

我尝试将操作栏的图标更改为onOptionsItemSelected(MenuItem)方法中的进度条。

    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    case R.id.progressitem2:
        mProgress = item;
        mProgressCreate = mProgress;
        mProgress.setActionView(R.layout.progress);
        mLayout.removeView(mTable);
        // Execute code that change mTable again.
        return true;
    }

progress.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" >
    <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="true"
            style="@android:style/Widget.ProgressBar.Small"/>

</LinearLayout> 

操作栏以这种方式创建:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.actionbar, menu);
    mProgress = menu.getItem(0);
    mProgressCreate = mProgress;
    return true;
}

action_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/progressitem2" 
            android:icon="@drawable/ic_action_refresh"
            android:title="Reload"
            android:showAsAction="ifRoom|withText"
            android:visible="true" />
</menu>

这很好用。单击操作栏图标后显示进度图标。

我尝试在mProgressCreate中保留原始操作栏符号的引用,并尝试在onCreate()方法的末尾添加操作视图:

mProgress.setActionView(mProgressCreate.getActionView());

但这不起作用......

这里有什么问题?

此致 桑德罗

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。在使用invalidateOptionsMenu()

重置操作视图之前,我忘了致电mProgress.setActionView(mProgressCreate.getActionView());
invalidateOptionsMenu();
mProgress.setActionView(mProgressCreate.getActionView());

一切正常: - )。