这是我的片段代码:
EFragment
public class PreviewFragment extends Fragment
{
@Inject Bus bus;
@Inject HorstDb db;
//@ViewById(R.id.preview_text_view)
TextView previewTextView;
public PreviewFragment() {}
@Override public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
((HorstApp)getActivity().getApplication()).getComponent().inject(this);
}
@Override public View onCreateView(LayoutInflater inf, ViewGroup parent, Bundle args)
{
super.onCreateView(inf, parent, args);
View result = inf.inflate(R.layout.fragment_preview, parent, false);
previewTextView = (TextView) result.findViewById(R.id.preview_text_view);
return result;
}
@Override
public void onResume() { super.onResume(); bus.register(this); }
@Override
public void onPause() { super.onPause(); bus.unregister(this); }
@Subscribe
public void onTemplateSelected(TemplateSelected se)
{
Cursor c = db.getReadableDatabase().query("templates", null, "_id = ?",
new String[] { Long.toString(se.id) },
null, null, null);
if(c.moveToFirst())
{
previewTextView.setText(c.getString(c.getColumnIndex("content")));
}
c.close();
}
}
onTemplateSelected
将通过Otto在onResume
中被调用。这有效,previewTextView
将为非空。以下版本不起作用,因为previewTextView也是null,我在片段的最内层生命周期中,我正在使用@ViewsById。不同之处在于我没有手动重载onCreateView
,而是使用@EFragment
和@ViewById
来获取对TextView的引用。
@EFragment(R.layout.fragment_preview)
public class PreviewFragment extends Fragment
{
@Inject Bus bus;
@Inject HorstDb db;
@ViewById(R.id.preview_text_view)
TextView previewTextView;
public PreviewFragment() {}
@Override public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
((HorstApp)getActivity().getApplication()).getComponent().inject(this);
}
@Override
public void onResume() { super.onResume(); bus.register(this); }
@Override
public void onPause() { super.onPause(); bus.unregister(this); }
@Subscribe
public void onTemplateSelected(TemplateSelected se)
{
Cursor c = db.getReadableDatabase().query("templates", null, "_id = ?",
new String[] { Long.toString(se.id) },
null, null, null);
if(c.moveToFirst())
{
previewTextView.setText(c.getString(c.getColumnIndex("content")));
}
c.close();
}
}
这是使用支持库中的Fragment类。
欢迎任何提示,为什么注释不起作用,并且在第二个例子中previewTextView为null。
答案 0 :(得分:0)
我使用的是PreviewFragment而不是PreviewFragment _ 。