gpt4 book ai didi

android - Loader 在 Activity 的 onCreateOptionsMenu 之前调用 onLoadFinished

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:13 25 4
gpt4 key购买 nike

AsynctaskLoader 从 Activity 的 OnCreate() 启动时,它会完成其工作并在操作栏菜单展开之前调用 onLoaderFinished() ,即在调用 onCreateOptionsMenu() 之前。

我需要根据加载程序的结果更改一些操作菜单项。什么方法可以解决这个问题?

更新:这发生在方向改变时。我在调试器中观察这个序列:

  1. 应用程序启动:onCreate() -> onCreateOptionsMenu() -> onLoadFinished()
  2. 旋转到横向:onCreate() -> onLoadFinished() -> onCreateOptionsMenu()
  3. 旋转回纵向:onCreate() -> onLoadFinished() -> onCreateOptionsMenu()

最佳答案

我在 onLoadFinished() 中尝试调用 shareActionProvider.setShareIntent() 时遇到了相同的情况,这取决于在 onCreateOptionsMenu() 中初始化的 shareActionProvider

我的解决方案是将我的 Intent 和 ShareActionProvider 都限定在 Fragment 中,然后在每个方法中初始化相应的字段并设置另一个(如果已经定义)。这样,无论先调用哪个,它都可以工作,而不会使菜单无效。

基本上是这样的

public class myFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
...
private ShareActionProvider shareActionProvider;
private Intent shareIntent;
...

onCreateOptionsMenu()

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_my_fragment, menu);

MenuItem menuItem = menu.findItem(R.id.action_share);
shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
//in the case where onLoadFinished is called first, simply set the share intent here.
if (null != shareIntent)
{
shareActionProvider.setShareIntent(shareIntent);
}
}

onLoadFinished()

@Override
public void onLoadFinished(android.support.v4.content.Loader<Cursor> loader, Cursor data) {

... <get some data from cursor> ...

shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_text)+data);

//shareActionProvider may be null due to onLoadFinished called before onCreateOptionsMenu
if (null != shareActionProvider)
{
shareActionProvider.setShareIntent(shareIntent);
}

关于android - Loader 在 Activity 的 onCreateOptionsMenu 之前调用 onLoadFinished,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com