TextView prefer = layoutTab.findViewById(R.id.prefer); prefer.setText(bnRoutePlanItem.getPusLabelName()); TextView time = layoutTab.findViewById(R.id.time); time.setText(getString(R.string.route_result_pass_time, (int) bnRoutePlanItem.getPassTime() / 60)); TextView distance = layoutTab.findViewById(R.id.distance); distance.setText(getString(R.string.route_result_distance_text, (int) bnRoutePlanItem.getLength() / 1000)); TextView trafficLight = layoutTab.findViewById(R.id.traffic_light); trafficLight.setText(String.valueOf(bnRoutePlanItem.getLights())); 报错 java.lang.IllegalStateException: Fragment RouteResultFragment{f466a91} not attached to a context.
时间: 2024-03-17 17:45:37 浏览: 119
这个错误通常是因为在 Fragment 销毁时,AsyncTask 等后台任务仍在执行,而在后台任务完成后再试图更新 Fragment 的 UI,导致出现此错误。在此情况下,你可以在 Fragment 的 onDestroyView() 方法中取消 AsyncTask,例如:
```
@Override
public void onDestroyView() {
super.onDestroyView();
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
mTask.cancel(true);
}
}
```
另外,你也可以将更新 UI 的代码放在 Fragment 可见时才执行,例如在 onResume() 方法中执行。
相关问题
View popupView = getLayoutInflater().inflate(R.layout.showlist, null); // 获取弹窗布局中的控件 TextView titleView = popupView.findViewById(R.id.title); TextView contentView = popupView.findViewById(R.id.content); // 设置弹窗标题和内容 titleView.setText("name"); contentView.setText(stringList.toString()); // 创建弹窗 PopupWindow popupWindow = new PopupWindow(popupView, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT); // 设置弹窗的背景和动画 popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); popupWindow.setAnimationStyle(R.style.PopupAnimation); // 显示弹窗 popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);在弹窗中显示List<String>
可以将List<String>转换成字符串,然后将其设置为弹窗中的内容。代码如下:
```
List<String> stringList = new ArrayList<>();
// 将List<String>转换成字符串
String contentStr = TextUtils.join(", ", stringList);
// 获取弹窗布局中的控件
View popupView = getLayoutInflater().inflate(R.layout.showlist, null);
TextView titleView = popupView.findViewById(R.id.title);
TextView contentView = popupView.findViewById(R.id.content);
// 设置弹窗标题和内容
titleView.setText("name");
contentView.setText(contentStr);
// 创建弹窗
PopupWindow popupWindow = new PopupWindow(popupView,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT);
// 设置弹窗的背景和动画
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popupWindow.setAnimationStyle(R.style.PopupAnimation);
// 显示弹窗
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
```
@Override public int getItemCount() { return data.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { public TextView name_textview,hexadecimal_textview; public MyViewHolder(@NonNull View itemView) { super(itemView); name_textview = itemView.findViewById(R.id.name_textview); hexadecimal_textview = itemView.findViewById(R.id.hexadecimal_textview);
这段代码是一个 RecyclerView 的适配器(Adapter)的实现代码。其中,`getItemCount()` 方法返回数据源中数据项的数量,即列表中需要展示的自定义按钮的数量。`MyViewHolder` 是一个自定义的 ViewHolder 类,其中包含展示列表项中名称和十六进制颜色代码的 TextView。在 MyViewHolder 构造函数中,通过 `findViewById()` 方法将布局文件中对应的 TextView 实例化并赋值给类成员变量。这样做的目的是为了避免每次展示列表项时都需要调用 `findViewById()` 方法,从而提高列表的性能。
阅读全文