使用AppCompatActivity时,适配器中的getSupportFragmentManager()未定义

use*_*690 5 android android-arrayadapter android-layout android-fragments android-fragmentactivity

我有一个活动(MainActivity),它扩展了AppCompatActivity,因为我在我的应用程序中使用了一些材料设计元素.

然后我有一个带有几个字段和一个按钮的数组适配器.此适配器具有单独的视图,并注入到我的MainActivity布局中.

当我单击适配器视图上的按钮时,我想打开一个显示一堆文本的新片段,但是,我似乎无法做到这一点,我认为这是因为我没有在MainActivity中扩展FragmentActivity?我在另一篇文章中读到我应该能够扩展AppCompatActivity并且仍然能够引用片段管理器...这是我打开片段的代码:

在我的自定义数组适配器中,按钮的onClick():

holder.desc.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
      JobDescFragment fragment= new JobDescFragment();
      FragmentTransaction transaction =      getSupportFragmentManager().beginTransaction();
      transaction.replace(R.id.fragment_container, fragment);
      transaction.addToBackStack(null);  
      transaction.commit();
  }
});
Run Code Online (Sandbox Code Playgroud)

我得到的错误是它无法解析getSupportFragmentManager().我究竟做错了什么?

我在我的适配器中导入android.support.v4.app.Fragment和.FragmentManager.

在此先感谢您的帮助!

编辑:

<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <com.lorentzos.flingswipe.SwipeFlingAdapterView
        android:id="@+id/frame"
        android:background="@color/laborswipe_lightgray"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:context=".MainActivity"
        android:layout_gravity="top"   />

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</merge>
Run Code Online (Sandbox Code Playgroud)

Jen*_*dra 19

你可以试试这个

FragmentTransaction ft = ((AppCompatActivity) mContext).getSupportFragmentManager()
                        .beginTransaction();
Run Code Online (Sandbox Code Playgroud)


DIN*_*LIT 7

例如在kotlin中将是这样。我已经尝试过了,并且效果很好

val dialog = IntervAddFragment()//The fragment that u want to open for example
       val ft = (context as AppCompatActivity).supportFragmentManager.beginTransaction()
        dialog.show(ft, ContentValues.TAG)
Run Code Online (Sandbox Code Playgroud)


Aka*_* kv 0

在适配器中传递上下文并使用

context.getSupportFragmentManager().beginTransaction();
Run Code Online (Sandbox Code Playgroud)