【发布时间】:2015-09-06 16:50:24
【问题描述】:
我有两个片段,我想从第一个片段更新第二个片段TextView。我决定使用interface
public interface LogTextUpdater {
void updateText(Information info);
}
这是我的第一个片段
public class UiFragment extends Fragment {
public LogTextUpdater log;
...
...
private void setInformationObject(String message){
Information info = null;
try {
info = new XmlParser(message).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
if(info != null){
log.updateText(info); // here I update second fragment TextView
}
}
}
这是我的第二个片段
public class LogFragment extends Fragment implements LogTextUpdater{
private TextView logView;
private UiFragment fragment;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragment = new UiFragment();
fragment.log = this; // register
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_log, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
logView = (TextView) view.findViewById(R.id.textLog);
}
@Override
public void updateText(Information info) {
logView.setText(info.getName() + " " + info.getCity());
}
}
这是我的MainActivity
public class MainActivity extends FragmentActivity {
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialisePaging();
}
private void initialisePaging() {
List<Fragment> fragments = new Vector<>();
fragments.add(Fragment.instantiate(this, UiFragment.class.getName()));
fragments.add(Fragment.instantiate(this, LogFragment.class.getName()));
mPagerAdapter = new PagerAdapter(getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(mPagerAdapter);
}
}
这是我的错误
java.lang.NullPointerException
at carproject.hfad.com.carproject.UiFragment.setInformationObject(UiFragment.java:289)
at carproject.hfad.com.carproject.UiFragment.sendCommand(UiFragment.java:313)
at carproject.hfad.com.carproject.UiFragment.access$300(UiFragment.java:39)
at carproject.hfad.com.carproject.UiFragment$1.onClick(UiFragment.java:125)
at android.view.View.performClick(View.java:4654)
at android.widget.CompoundButton.performClick(CompoundButton.java:104)
at android.view.View$PerformClick.run(View.java:19438)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
调试后我发现log is null! 但为什么呢?我在LogFragment注册接口fragment.log = this; // register
【问题讨论】:
-
在托管活动的帮助下完成片段到片段的通信。对托管活动进行回调,然后您可以将数据传递给第二个片段并在那里更新用户界面
标签: java android android-fragments interface nullpointerexception