3

Android アプリに 2 つのフラグメントを持つ 1 つのアクティビティがあります。最初のフラグメントには、ボタン (btnA) を配置しました。2 番目に、TextView (txtB) を置きます。

最初のアクティビティのボタンを押して、2 番目のフラグメントの TextView にテキストを設定するにはどうすればよいですか?

Thx、私はAndroidアプリ開発が初めてです

JoskXP

4

2 に答える 2

2

ここで説明されている Android のベスト プラクティスに従います。

これは Graeme のソリューションよりも少し冗長ですが、フラグメントを再利用できます。(別の画面で FragmentWithButton を使用することができ、ボタンは別のことを行うことができます)

2 つのフラグメント (FragmentWithButtonFragmentWithText) と 1 つのアクティビティ ( MyActivity)があります。

  1. でインターフェイス FragmentWithButtonHostを作成しFragmentWithButtonます。

    public class FragmentWithButton extends Fragment {
    
        FragmentWithButtonHost host;
    
        public interface FragmentWithButtonHost{
            public void onMyButtonClicked(View v);
        }
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
    
            try {
                host = (FragmentWithButtonHost) activity;
            }
            catch (ClassCastException e) {
                // TODO Handle exception
            }
        }
    
        /**
         * Click handler for MyButton
         */
        public void onMyButtonClick(View v) {
            host.onMyButtonClicked(v);
        }
    }
    
  2. アクティビティからテキストを設定するパブリックメソッドを作成します。FragmentWithText

    public class FragmentWithText extends Fragment{
    
          ...
    
          public void setText(String text) {
               // Set text displayed on the fragment
          }
    }
    
  3. アクティビティがインターフェイスを実装していることを確認し、メソッドFragmentWithButtonHostを呼び出します。setText

    public MyActivity implements FragmentWithButtonHost {
    
        ...
    
        @Override
        public void onMyButtonClicked(View v) {
            getFragmentWithText().setText("TEST");
        }
    
        public FragmentWithText getFragmentWithText() {
            // Helper method to get current instance of FragmentWithText, 
            // or create a new one if there isn't any
        }
    }
    
于 2013-02-05T13:28:42.580 に答える
2

さて、あなたはこのようなことをすることができます:

アクティビティで、両方のフラグメントへの公開リンクを提供します。

public FragmentNumberOne getFragmentOne() {
    return fragOne;
}

public FragmentNumberTwo getFragmentTwo() {
    return fragTwo;
}

次に、フラグメント 1TextViewのクラスでへのアクセサを提供します。Fragment

public TextView getTextView() {
    return mTextView;
}

オリジナルFragmentでは、次を使用できます。

((MyActivity)getActivity()).getFragmentOne().getTextView().setText("Hello");
于 2013-02-05T10:37:56.683 に答える