Java 如何将片段传递给CustomArrayAdapter构造函数

Java 如何将片段传递给CustomArrayAdapter构造函数,java,android,Java,Android,我有一个MainActivity,它有一个名为myFragment的片段。我使用ViewPagerAdapter调用片段,效果很好 我试图将MyFragment传递给CustomArrayAdapter,但我的应用程序在调用超类时在构造函数处崩溃 这是我的密码: MyFragment.java public class MyFragment extends Fragment implements MyInterface { public MyFragment() {} @Ov

我有一个MainActivity,它有一个名为myFragment的片段。我使用ViewPagerAdapter调用片段,效果很好

我试图将MyFragment传递给CustomArrayAdapter,但我的应用程序在调用超类时在构造函数处崩溃

这是我的密码:

MyFragment.java

public class MyFragment extends Fragment implements MyInterface {

    public MyFragment() {}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_paired_device, container, false);
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Row[] arrList = new Row[5];

        // THE FOLLOWING LINE IS SUPPOSED TO PASS THE FRAGMENT
        CustomAdapter myCustomAdapter = new CustomAdapter((MyInterface) this.getActivity(), arrList);
    }
}
CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<Row> {
    Row[] rowItems = null;
    MyInterface myFragment;

    public CustomAdapter(MyInterface myFragment, Row[] resource) {
        // THE FOLLOWING LINE THROWS AN ERROR
        super((FragmentActivity) myFragment, R.layout.row_with_cb, resource);
        this.rowItems = resource;
        this.myFragment = myFragment;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    }
}
出于某种原因,this.getActivity应该发送FragmentActivity,但它发送MainActivity

有人能帮我解决这个问题吗

我正试图将我的片段传递给CustomArrayAdapter,但我的 应用程序在调用超类时在构造函数处崩溃

您当前正在尝试传递附加到
MyFragment
活动,而不是
片段本身:

CustomAdapter myCustomAdapter = new CustomAdapter((MyInterface) this.getActivity(), arrList);
您收到
ClassCastException
的原因是您试图将
getActivity()
方法调用返回的
Activity
转换为
(MyInterface)
。由于
MainActivity
未实现
MyInterface
,因此会导致异常

实际上还不清楚你想要实现什么。正如Eugen在回答中指出的那样,默认的
ArrayAdapter
构造函数采用
上下文
参数。
MyInterface
MyFragment
都不是
Context
s的示例。但是,您的
活动是一个
上下文
。因此,以下超级调用没有意义:

public CustomAdapter(MyInterface myFragment, Row[] resource) {
    super((FragmentActivity) myFragment, R.layout.row_with_cb, resource);
}
因此,您应该在此处传递您的
活动。如果您仍然希望传递一个
接口
,那么您可以将构造函数调整为:

private MyInterface myInterface;    

public CustomAdapter(Context context, Row[] rows, MyInterface myInterface){
    super(context, R.layout.row_with_cb, rows);
    this.myInterface = myInterface;
}

但是,我不确定您是否真的想从您的问题中将
片段
MyInterface
传递给适配器。

数组适配器只需要上下文(而不是片段)

将其更改为下一个:

public CustomAdapter(Context context, Row[] resource) {
        super(context, R.layout.row_with_cb, resource);
        ...
}   
并移除活动的投射:

CustomAdapter myCustomAdapter = new CustomAdapter(this.getActivity(), arrList);

我试图实现的情景比问题本身要复杂一点

我通过将这个和这个.getContext()传递给CustomAdapter构造函数修复了它。正如Shayan和PPartisan提到的,只要一个上下文就足以发送到ArrayAdapter构造函数

从片段的角度来看,这个.getActivity()应该会生成当前片段的“FragmentActivity”(不确定它是否应该是MainActivity),这是CustomAdapter的超类的有效参数,但它不会返回该参数(我仍然不确定为什么会发生这种情况)。这就是为什么我要做演员的原因

我需要片段本身的原因是,我有一个回调方法(在CustomAdapter内部),它调用由myInterface声明并由片段实现的方法

现在,一切都很好


感谢将
这个
而不是
(MyInterface)这个.getActivity()
传递给adapterDoes
MainActivity
extend
FragmentActivity
?感谢@shayanpourvatan
CustomAdapter myCustomAdapter = new CustomAdapter(this.getActivity(), arrList);