MainActivity가 AsyncTask를 호출하여 일부 네트워크 I/O를 수행합니다. AsyncTask가 시작되면 ActionBar의 아이콘을 '밝게'하고 싶습니다. AsyncTask가 완료되면, ActionBar 아이콘을 보이지 않게하고 싶습니다. 예를 들어 AsyncTask 완료시 버튼 클릭이 아닌 아이콘을 표시하고 싶습니다.ActionBar 아이콘을 동적으로 표시/표시하지 않음
이 시점에서 AsyncTask 시작시 ActionBar 아이콘을 성공적으로 표시 할 수 있습니다. AsyncTask 완료시 AsyncTask가 완료되었음을 나타 내기 위해 MainActivity로 다시 브로드 캐스트를 보냅니다. 이 방송을 사용하여 ActionBar 아이콘을 보이지 않게 할 수 있어야합니다. InvalidateMenuOptions()를 사용하여 onPrepareMenuOptions를 다시 만들고 ActionBar 아이콘을 보이지 않게 만들려고 시도했지만 작동하지 않습니다. 여기 내 시도는 지금까지입니다 - 모든 코드가 MainActivity에서 내 MainActivity 클래스
발췌에서 발췌 :
public class MainActivity extends Activity {
private static boolean dataXferRunning = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
// broadcast receiver to determine if BasestationTransfer is active
basestationBroadcastReceiver = new BasestationBroadcastReceiver();
basestationIntentFilter = new IntentFilter("XFER_RUNNING_ACTION");
boolean hasWifi = CWICUtil.getNetworkState(this);
if(hasWifi) {
if(dataXferRunning == false) {
containerCount = 0;
DBAdapter dbAdapter = CWICApplication.dbAdapter();
try {
containerCount = (int)dbAdapter.getUnsentContainersCount();
} catch (SQLException e) {
Log.e(TAG, "getUnsentContainersCount() failed: " + e.toString());
e.printStackTrace();
}
if(containerCount > 0) {
invalidateOptionsMenu();
startTransfer(); //AsyncTask
invalidateOptionsMenu();
}
}
}
}
}
내 BroadcastReciever :
public static class BasestationBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent.getAction();
boolean isRunning = intent.getBooleanExtra("XFER_RUNNING", false);
if(isRunning) {
dataXferRunning = true;
} else {
dataXferRunning = false;
}
}
};
내 onPrepareOptionsMenu :
@Override
public boolean onPrepareMenuOptions(Menu menu) {
if(dataXferRunning) {
menu.findItem(R.id.action_socketServiceConnected).setVisible(true);
} else {
menu.findItem(R.id.action_socketServiceConnected).setVisible(false);
}
return super.onPrepareOptionsMenu(menu);
}
요약하면 - AsyncTask에서 공동으로 방송을 성공적으로 수신하고 있습니다. 값을 수정하십시오. buttonClick을 사용하여이 작업을 수행하는 많은 코드를 보았지만 AsyncTask가 완료되면 내 ActionBar 아이콘이 동적으로 보이지 않습니다. 또한 - 이것은 내 첫 번째 게시입니다. 지금 몇 달 동안 나를 잼에서 벗어나게했기 때문에이 커뮤니티 덕분에 문제를 명확히 할 수 있는지 알려 주시기 바랍니다.
도움 주셔서 감사합니다. 'onPrepareOptionsMenu (메뉴 메뉴) 및 'menu.findItem (R.id.xxx) .setVisible에서 (거짓에게, 나는 (사실) 'menu.findItem (R.id.xxx) .setVisible을하고 결국); ' in BroadcastReceiver – hooverbox
예, 문제는 내가 방송인 이후에 onCreateOptionsMenu가 호출되어 실제 옵션이 절대로 어떤 이유로 든 활성화되지 않는다는 것입니다. – Maxrunner