我在创建界面方面还是新手。我参考了很多教程,但仍然不起作用。我想将值从一个活动传递到另一个片段。mListener为空。
如何正确地调用听者?
接口
public interface ListenerCardDetails {
void getCardSelected(String id);
}MainActivity.java
public class CardDetailsActivity extends AppCompatActivity {
private ListenerCardDetails mListener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// some stuff
mListener.getCardSelected("20");
}
public void setListener(ListenerCardDetails mListener) {
this.mListener = mListener;
}MyFragment.java
public class TabPoints extends Fragment implements ListenerCardDetails {
private CardDetailsActivity mCardDetailsActivity;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tab_points, container, false);
configView(view);
return view;
}
private void configView(View view){
((CardDetailsActivity) getActivity()).setListener(this);
}
@Override
public void getCardSelected(String id) {
Toast.makeText(getActivity(), id, Toast.LENGTH_LONG).show();
}
}误差
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548):无法实例化活动java.lang.InstantiationException: java.lang.Class在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)没有零参数构造函数,原因是: java.lang.InstantiationException: java.lang.Class在java.lang.Class.newInstance(原生方法)没有零参数构造函数
任何帮助都是非常感谢的。
发布于 2017-02-08 07:16:37
无法实例化活动java.lang.InstantiationException: java.lang.Class没有零参数构造函数
这正好告诉你发生了什么。在Android中,不允许使用自定义构造函数创建任何Activity或Fragment。这是因为Android框架使用引擎盖下的反射来实例化它们。
如果您想在Activity和Fragment之间进行通信,应该在Fragment中使用onAttach(Context context)。
请参阅Android https://developer.android.com/training/basics/fragments/communicating.html的官方文档。
发布于 2017-02-08 07:24:15
您可以做的就是在Interface中定义Fragment并向其中添加void getCardSelected(String id);方法。在Activity中实现相同的接口,重写接口方法,并在该方法中写入逻辑。
要获得更多解释,请参阅本教程
如果要将值从Activity发送到Fragment,请遵循以下链接:在android中将数据从活动发送到片段
希望它能帮到你。
发布于 2017-02-08 07:32:56
不要使用自定义构造函数,而是使用setListener。
public class MainActivity extends AppCompatActivity {
private ListenerCardDetails mListener;
public void setListener(ListenerCardDetails mListener) {
this.mListener = mListener;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// some stuff
mListener.getCardSelected("20");
}
public class TabPoints extends Fragment implements ListenerCardDetails {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tab_points, container, false);
configView(view);
return view;
}
private void configView(View view){
((MainActivity) getActivity()).setListener(this);
}
@Override
public void getCardSelected(String id) {
Toast.makeText(getActivity(), id, Toast.LENGTH_LONG).show();
}
}https://stackoverflow.com/questions/42106814
复制相似问题