我试图在用户单击“回收者”视图中的项目时创建一个新的片段实例。它崩溃了:“ fragmentTransactiion.commit()”抛出一个JavaIllegalStateException异常,表明该活动已被破坏。这是我的RecyclerViewAdapter类中启动新片段的代码:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/static/styles.css">
<style>
.flex-container > div {
width: 15%;
margin: .5%;
text-align: center;
line-height: 200%;
font-size: 100%;
color: rgb(226, 225, 225);
{% for k, v in locations_dicts.items() %}
background-color:{{ v[1] }};
{% endfor %}
}
.flex-container > div:hover {
box-shadow: 0 0 11px rgb(255, 255, 255);
}
</style>
</head>
<div>
<h2 class="dashboard-title">Mikrotik Dashboard</h2>
</div>
<div class="topnav">
<a class="active" href="/">Dashboard</a>
<a href="/add">Add Location</a>
<a href="/remove">Remove Location</a>
</div>
<div id="cell" class="flex-container" onclick="remove()">
{% for k, v in locations_dicts.items() %}
<div>{{ k }}<br>{{ v[0] }}<br>{{ v[1] }}<br>{{ v[2] }}</div>
{% endfor %}
</div>
<script id="remove">
function remove() {
var remove;
if (confirm("Do you wish to remove this location?\n(This currently does nothing.)")) {
remove = true;
} else {
remove = false;
}
return remove
}
</script>
<meta http-equiv="refresh" content="60">
</html>
我不确定我在做什么错。任何帮助,将不胜感激!
答案 0 :(得分:0)
您尝试在以下几行中访问不存在/创建的活动的上下文。
AppCompatActivity context = new AppCompatActivity();
FragmentManager fragmentManager = context.getSupportFragmentManager();
您应该将其更改为类似
FragmentManager fragmentManager = activity.getSupportFragmentManager();
您可以通过保存对RecyclerView所属活动的引用来实现此目的。上面代码块中的 activity 应该是创建它的那个,而不是新的Activity实例。
一种更好的方法是拥有自己的自定义接口作为通知其侦听器(活动)的回调。然后,该活动应执行Fragment或Activity转换。