0

フラグメントがどのように機能するかを理解しようとしています。MainActivity、Fragment1、Fragment2 の 3 つのクラスがあります。

MainActivity は SherlockFragmentActivity を拡張し、

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Fragment1 firstFragment = new Fragment1();
    firstFragment.setArguments(getIntent().getExtras());
    getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container1, firstFragment).commit();

ここで、Fragment1 を fragment_container にロードすると、きれいに表示されます。

(したがって、main_activity.xml には 1 つしかありません)

わかりました。Fragment1 は SherlockFragment を拡張し、それ以上何もしません

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

    return inflater.inflate(R.layout.fragment1layout, container, false);

したがって、1 つのテキスト ビューと 1 つのボタンを持つ .xml からインフレートするだけです。

世界のどこで Button をインスタンス化し、Fragment1 を Fragment2 に置き換えるコードを彼に与えることができるでしょうか?

そのためのコードは何ですか。私は現在「Fragment1」にいるので、どうにかして Fragment ホルダーと通信し、「Fragment2 に置き換えてください」と伝える必要があります。

Fragment2もSherlockFragmentを拡張し、何もせず、空の.xmlを膨らませます

4

2 に答える 2

1

以下のように、fragment1 から fragment2 を呼び出す必要があります。

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.fragment1layout, container, false);
            Button button = (Button)view.findViewById(R.id.yourButton);
            button.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //Replace your fragment

                }
            });
        return view;
}
于 2012-09-13T12:31:00.710 に答える
0

私は今「Fragment1」にいるので、どうにかして Fragment ホルダーと通信し、「Fragment2 に置き換えてください」と伝える必要があります。

Fragment1にあるボタンをクリックしたときにFragment1をFragment2に置き換えたい場合:

(ベストプラクティス)

  1. ここで説明されているように、fragment1 から MainActivity へのコールバックを作成する必要があります
  2. MainActivity に、フラグメント 1 をフラグメント 2 に置き換えるロジックを配置します。

(悪い習慣)

  1. MainActivityたとえば、あるフラグメントを別のフラグメントに置き換えるメソッドを作成しますchangeFirstFragmentToAnother()
  2. 次に、fragment1 を fragment2 に変更する必要がある場合は、次のように (fragment1 から) このメソッドを手動で呼び出すことができます。

    ((MainActivity)getActivity()).changeFirstFragmentToAnother();

于 2012-09-13T13:00:48.413 に答える