4

私は Android のコーディングの初心者で、2 つのフラグメントを使用してアプリケーションを作成しようとしています。残念ながら、レイアウトにアクションを設定するコードを追加すると、アプリケーションがクラッシュするため、フラグメント ファイルのどこにコードを配置すればよいか悩んでいます。関数 onCreate を取り出すと、アプリケーションはクラッシュせず、レイアウトも良好です。

これが私のコードです。ご回答ありがとうございます。

public class FragmentOne extends Fragment{

    public static final String TAG = "FragmentOne";


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = View.inflate(getActivity(), R.layout.fragmentone, null);

        return v;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final EditText etData = (EditText) getView().findViewById(R.id.etData);


    }
}
4

2 に答える 2

10

まず第一に、あなたのコードにはいくつかの間違いがあります。まず、@user1873880前述のように、onCreate()は常に の前onCreateView()に呼び出されるため、 でビューを処理することを検討する必要がありますonCreateView()。私が見ることができる2番目Viewの間違いは、で使用するように設計されているため、作成していないことですFragment。私の意見では、フラグメントは次のようになります。

public class FragmentOne extends Fragment {

    private static final String TAG = "FragmentOne";

    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        // create your view using LayoutInflater 
        return inflater.inflate(R.layout.fragmentone, container, false);
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // do your variables initialisations here except Views!!!
    }

    public void onViewCreated(View view, Bundle savedInstanceState){
        super.onViewCreated(view, savedInstanceState);
        // initialise your views
        EditText etData = (EditText) view.findViewById(R.id.etData);
    }
}

これがお役に立てば幸いです!: )

于 2013-07-27T20:39:48.523 に答える
0

その理由は、onCreateが の前に呼び出されるため、コールバックonCreateViewの後でのみビューを操作できるからです。onCreateView詳細については、フラグメントのライフサイクルをこちらで確認してください。

于 2013-07-27T19:48:21.800 に答える