从RecyclerViewAdapter类创建新片段

时间:2018-07-24 22:17:19

标签: android fragment fragmenttransaction

我试图在用户单击“回收者”视图中的项目时创建一个新的片段实例。它崩溃了:“ 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>

我不确定我在做什么错。任何帮助,将不胜感激!

1 个答案:

答案 0 :(得分:0)

您尝试在以下几行中访问不存在/创建的活动的上下文。

AppCompatActivity context = new AppCompatActivity();
FragmentManager fragmentManager = context.getSupportFragmentManager();

您应该将其更改为类似

FragmentManager fragmentManager = activity.getSupportFragmentManager();

您可以通过保存对RecyclerView所属活动的引用来实现此目的。上面代码块中的 activity 应该是创建它的那个,而不是新的Activity实例。

一种更好的方法是拥有自己的自定义接口作为通知其侦听器(活动)的回调。然后,该活动应执行Fragment或Activity转换。