1

10 進数、2 進数、8 進数、16 進数の 4 つの計算モードを切り替えられる電卓アプリケーションを作成しています。さまざまなモードのさまざまな UI を管理するために、Activity に 4 つの Fragment サブクラスがあります。各フラグメントには、アクティビティのメイン XML ファイルに加えて、独自の XML レイアウト ファイルがあります。Fragments のレイアウトをインフレートするためのガイドを Android Developer サイトで見つけ、そのガイドに従いました。ただし、レイアウトのさまざまなコンポーネントにリスナーなどを追加したいと思います。できれば Fragment の onCreateLayout メソッド内、または簡単に実行してコードの重複を最小限に抑えることができる他の場所に追加したいと考えています。

ただし、findViewByID を呼び出してインフレートされたビューの 1 つにアクセスしようとすると (明らかに LayoutInflater.inflate を呼び出した後)、null の戻り値が返されるようです。この問題は、onCreateLayout 内から、またはアクティビティの他の場所から (理論的にはビューが作成された後に) findViewByID を呼び出した場合に発生します。ここで何がうまくいかないのですか?

問題になると思われる 1 つの問題は、さまざまな Fragment レイアウト間でビューの名前をオーバーロードしたことです。たとえば、バイナリ レイアウトの「1」ボタンは、16 進レイアウトの「1」ボタンと同じ ID を持ちます。Binary レイアウトと Hex レイアウトの両方が同時に Activity の一部になることは決してないと仮定すると、これは許可されますか?

ありがとう。

4

1 に答える 1

1

Fragment では、異なるレイアウトで同じ ID を使用しても問題ないと思います。まず、膨張したビューをキャッチしてから、この中のものを見つける必要があります。例えば ​​ -

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

    view = inflater.inflate(R.layout.frg1, container, false);
    android.util.Log.v("", "!!!!!!!!!! Frg1  !!!!!!!!!");   


    Button b = (Button) view.findViewById(R.id.b1);
    b.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            Toast.makeText(getActivity(), "here", Toast.LENGTH_SHORT).show();
        }
    });

    return view;
}
于 2012-08-30T09:08:03.990 に答える