我试图从一个片段传值的活动,我可以,因为我得到也不例外之间传递数据。在我的片段中,我必须选择一个在FrameLayout中呈现的星座。 要做活动和片段之间的通信我正在使用回调。安卓片段和活动
唯一的例外是:
java.lang.NullPointerException: Attempt to invoke interface method
'void
com.converter.android.dailyhoroscope.HoroscopeChoice$OnInfoChangedListener.onInfoChanged(java.lang.String)'
on a null object reference
at
com.converter.android.dailyhoroscope.HoroscopeChoice$1.onClick(HoroscopeChoice.java:133)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21153)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
在片段,我有以下代码:
public class HoroscopeChoice extends DialogFragment {
public HoroscopeChoice() {
}
/******************************
* Callback
********/
public static void setOnInfoChangedListener(OnInfoChangedListener callback) {
mCallback = callback;
}
public interface OnInfoChangedListener {
public void onInfoChanged(String horosocopo);
}
(...)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_horoscope_choice,
container, false);
Button aquarius;
aquarius = (Button) view.findViewById(R.id.aquarius1);
final int id = view.getId();
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String horoscopo = onClick2(v.getId());
mCallback.onInfoChanged(horoscopo);
}
};
aquarius.setOnClickListener(onClickListener);
return view;
}
public String onClick2(int id)
{
String horoscopo="";
if (id == R.id.aquarius1) {
horoscopo = "Aquarius";
}
(...)
return horoscope;
}
上的活动,如果我试图把setOnInfoChangedListener(this);
要解决的例外,我有,我收到另一个错误“无法解析方法setOnInfoChangedListener”。
活动:
public class SchedulerActivity extends Activity implements HoroscopeChoice.OnInfoChangedListener {
(...)
setOnInfoChangedListener(this);
public void onInfoChanged(String horoscopo) {
String sign="";
mHoroscopeDisplay = (TextView) findViewById(R.id.dailyHoroscope4);
mHoroscopeDisplay.setText(horoscopo);
saveData(dHosocope, sign);
}
}
你能帮助我吗?
我在这里有一个答案给你http://stackoverflow.com/questions/14247954/communicating-between-a-fragment-and-an-activity-best-practices/25392549#25392549 – Eenvincible