我的照片应用程序里有一个片段。当用户编辑照片时,
我的片段异步任务:
protected class CompressBitmapImageTask extends AsyncTask<Void, Void, byte[]>
{
private Bitmap editedImageBitmap;
private BitmapDownscale bitmapDownscale;
CompressBitmapImageTask(Bitmap editedImageBitmap, BitmapDownscale bitmapDownscale)
{
this.editedImageBitmap = editedImageBitmap;
this.bitmapDownscale = bitmapDownscale;
}
@Override
protected byte[] doInBackground(Void... params)
{
BitmapDownscale.BitmapDownscaleResult result = bitmapDownscale.downscaleFromBitmap(editedBitmap, true);
return result.bitmapBytes;
}
@Override
protected void onPostExecute(byte[] bytes)
{
onEditImageComplete(bytes);
}
}
protected void onEditImageComplete(@Nullable byte[] editedBitmapData)
{
if (editedBitmapData != null)
photoModel.editedBitmapData = editedBitmapData;
getParentFragmentManager().popBackStack();
}
我在调用getParentFragmentManager()时遇到异常。我提到了一个相关的帖子,Fragment MyFragment not attached to Activity,但它与Fragment not be Activity相关。所以我不确定添加isadded()
是否可以解决我的问题。理想情况下,在尝试弹出backStack()时,我需要确保fragmentManager不为空。只有Androidx.fragment.app.fragment中的isStateSaved()方法可以实现,但我认为这不是一个合适的方法。谁能给我指出正确的方向吗?
在进一步阅读了关于Fragment Manager的Android文档和这个未附加到Activity的答案片段MyFragment之后,我认为isAdded()检查是通过FragmentManager确认该片段是否与Activity相关联的方法。起初看方法的定义是令人困惑的,
/**
* Return true if the fragment is currently added to its activity.
*/
final public boolean isAdded() {
return mHost != null && mAdded;
}
因为它说明宿主是否不为空以及是否添加了片段。我认为关键是mAdded,它告诉我们片断是否被添加到片断管理器中。所以我用一个检查更新了我的popstack逻辑,
protected void onEditImageComplete(@Nullable byte[] editedBitmapData)
{
if (editedBitmapData != null)
photoModel.editedBitmapData = editedBitmapData;
if (isAdded())
getParentFragmentManager().popBackStack();
} ```
我正在使用导航组件版本,并且我使用在3个屏幕之间来回导航 <代码>导航。findNavController(it)。导航(R.id.action\u参与者) 第二次浏览相同的屏幕后,我可以看到第二个片段,但我收到一个异常。我在FragmentManager上启用了日志,似乎有一个相同片段的不同实例没有附加,导致错误 关于导航组件为什么要创建另一个未连接的片段实例,有什么想法吗?有什么变通方法可以获
我想在收到一些HTTP请求的响应后,更新几个<code>片段 。-- 活动 适配器 碎片样本 日志显示位置0,1处的片段的<code>updateData</code>工作良好。但是对于位置2处的片段,它会导致错误。 我发现的区别是适配器没有为位置2调用,这意味着没有调用的。因此不存在。 我的直觉告诉我,问题一定来自适配器的工作流或fragmentManager事务。但是作为一个Android初学
我想要的正确行为是: 我目前的工作: 当我想从B回到A时,我使用了,但在这里一切都很顺利 我真的需要与管理器中包含的片段相同。 有人知道我做错了什么吗? 我的代码: 我已经搜索了一段时间没有结果的解决方案,所以请不要将此标记为重复。 提前感谢。
设置文本指针异常,我得到错误。 } 我得到的错误; E/AndroidRuntime:致命异常:主进程:com.vortex.soruhafizam,PID:6341 java.lang.nullPointerException:尝试对位于com.vortex.soruhafizam.fragmentbirinci.onCreateView(Fragmentbirinci.java:32)的And
我有一个,它创建一个,然后这个创建另一个: 这让我想到。是否真的可以删除并转到? 提前感谢您的时间,我在网上找不到任何合适的信息!
我试图在列表视图的onItemClick中用另一个片段替换片段,我想将所选项目名称从列表片段发送到另一个片段,但它显示空指针异常 @覆盖onItemClick上的公共无效(AdapterView ar0,视图,int位置,长id){ 但是同样的概念在下面的按钮点击中工作