我正在编写一个带照片的应用程序,然后在将照片保存到内存后执行片段交易,以替换原始片段(显示纹理视图和带有当前手机上的图片的回收视图)显示最近捕获的图像以及两个editTexts。片段事务提交,新图像暂时显示,此时editTexts不在屏幕上呈现。然后图像消失,渲染两个editText。我在两个片段中记录了文件名,看到文件名从一个片段转移到下一个片段,根据我在logcat中看到的信息被传输。我还在logcat中查找了与glide api有关的错误消息。我没有看到任何与图像或滑行有关的内容。用于进行片段事务并在新片段中加载图像的代码如下所示。
显示图片的代码
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
filePath = getArguments().getString("filepath");
Log.i("file name 2", filePath);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.dialog_new_image_post_submit, container, false);
imageSubmission = root.findViewById(R.id.imagePost);
tagline = root.findViewById(R.id.image_tagline);
genre = root.findViewById(R.id.genre);
if (!getArguments().getString("filepath").equals(null)) {
Glide.with(this)
.load(new File(filePath))
.into(imageSubmission);
Log.i("file name 3", filePath);
Toast.makeText(getActivity(), filePath, Toast.LENGTH_SHORT).show();
}
return root;
}
在片段之间传输文件名的代码
public void continueToSubmit(String filename){
Bundle bundle = new Bundle();
bundle.putString("filepath", filename);
Log.i("file name 1", filename);
NewImageSubmission nis = new NewImageSubmission();
nis.setArguments(bundle);
getParentFragment().getChildFragmentManager()
.beginTransaction().replace(R.id.dialog_frame_layout, nis)
.commit();
}
该应用已拥有读取和写入文件的权限。我不确定为什么我的形象不会持续存在。我还应该注意,最初用于定义布局的xml具有约束布局作为父视图组,当图像视图上的垂直约束被设置为包装内容(vs固定或匹配约束)时,图像显示,但图像覆盖它下面的editText,否则图像不显示。从理论上讲,图像视图的底部和editText的顶部之间应该存在8dp的差异。我最终切换了一个垂直线性布局的约束布局,希望这会解决问题,但事实并非如此。
更新
我意识到暂时出现的捕获图像与片段事务无关。拍摄照片时,纹理视图似乎显示简短的快照,而recyclerview消失。当我注释掉片段事务时,recyclelerview会暂时消失,然后重新出现,显示新图片。 textureview返回显示预览。那么,为什么在已经确定文件路径从一个片段传输到下一个片段时,图像是否显示在下一个片段上?它可能与文件有关吗?
更新
如果语句显示日志语句,如果文件不存在则显示没有日志语句。向glide对象添加请求侦听器并创建失败的日志语句在控制台中没有显示任何内容。
答案 0 :(得分:1)
为了让图像在imageview中显示而不让imageview模糊直接在它下面的edittext,我不得不用dp设置高度/宽度(而不是使用match_parent或wrap_contents),而视图是约束布局的子项。将视图作为垂直线性布局的子视图,其中高度设置为0dp,权重设置为1,而两个edittext的高度设置为wrap_contents对我来说不起作用。