Java 如何将片段传递给CustomArrayAdapter构造函数
我有一个MainActivity,它有一个名为myFragment的片段。我使用ViewPagerAdapter调用片段,效果很好 我试图将MyFragment传递给CustomArrayAdapter,但我的应用程序在调用超类时在构造函数处崩溃 这是我的密码: MyFragment.javaJava 如何将片段传递给CustomArrayAdapter构造函数,java,android,Java,Android,我有一个MainActivity,它有一个名为myFragment的片段。我使用ViewPagerAdapter调用片段,效果很好 我试图将MyFragment传递给CustomArrayAdapter,但我的应用程序在调用超类时在构造函数处崩溃 这是我的密码: MyFragment.java public class MyFragment extends Fragment implements MyInterface { public MyFragment() {} @Ov
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()
传递给adapterDoesMainActivity
extendFragmentActivity
?感谢@shayanpourvatan
CustomAdapter myCustomAdapter = new CustomAdapter(this.getActivity(), arrList);