Android Fragment Interaction

时间:2013-02-05 10:31:40

标签: android android-fragmentactivity

我在Android应用中有2个片段的1个活动。 在第一个片段我做了一个按钮(btnA)。 在第二个我推了一个TextView(txtB)。

如何通过按下第一个活动上的按钮在第二个片段的TextView中设置文本?

Thx,我是Android应用开发的新手

JoskXP

2 个答案:

答案 0 :(得分:2)

你可以这样做:

在您的活动中,提供指向您的两个片段的公共链接:

public FragmentNumberOne getFragmentOne() {
    return fragOne;
}

public FragmentNumberTwo getFragmentTwo() {
    return fragTwo;
}

然后为片段1的TextView类中的Fragment提供访问者:

public TextView getTextView() {
    return mTextView;
}

然后在您原来的Fragment中,您可以使用:

((MyActivity)getActivity()).getFragmentOne().getTextView().setText("Hello");

答案 1 :(得分:2)

按照Android最佳做法描述here

这比Graeme的解决方案稍微冗长,但允许重复使用您的片段。 (您可以在另一个屏幕中使用FragmentWithButton,按钮可以执行不同的操作)

您有两个片段(FragmentWithButtonFragmentWithText)和一个活动(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
        }
    }