6

xml レイアウトから RoboFragment にいくつかのビューを挿入したいのですが、残念ながら Nullpointer Exception が発生しています。@ContentView(R.layout.fragmentlayout)RoboGuice (優れた DI フレームワークであることに加えて) にはドキュメントがほとんどないため、RoboFragment に注釈を付けるために使用できるかどうかわかりません。代わりに何かすべきことはありますか?私が現在行っていることは次のとおりです。

public class TestFragment extends RoboFragment {

    @InjectView(R.id.upBtn) private Button upBtn;   

    @Override
    public View onCreateView(LayoutInflater layoutInflater, 
            ViewGroup container, Bundle savedInstanceState) {

        super.onCreateView(layoutInflater, container, savedInstanceState);
        View view = layoutInflater.inflate(R.layout.fragmentlayout, container, false);
        RoboGuice.getInjector(getActivity()).injectMembers(this);
        upBtn.setSelected(false);   // <------ Null pointer here
        return view;
    }
}
4

2 に答える 2

14

RoboFragment のソースを見ると、

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    RoboGuice.getInjector(getActivity()).injectViewMembers(this);
}

どうしても手動で注入する場合は、 を使用してinjectViewMembers()ください。後までビューに触れるのを遅らせることができればonViewCreated()、それはあなたのために設定されます。

于 2013-01-15T18:05:49.993 に答える
-3

ビューを戻す必要があります。upBtn.setSelected(false); の後

public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {

    super.onCreateView(layoutInflater, container, savedInstanceState);
    View view = layoutInflater.inflate(R.layout.fragmentlayout, container, false);
    RoboGuice.getInjector(getActivity()).injectMembers(this);
    upBtn = (Button) view.findViewById(YOUR_ID); // Initialization
    upBtn.setSelected(false);   // <------ Null pointer here
 return view;
}
于 2013-01-08T14:09:19.017 に答える