Android 如何通过按下按钮在第二个片段的TextView中设置文本

Android 如何通过按下按钮在第二个片段的TextView中设置文本,android,android-fragmentactivity,Android,Android Fragmentactivity,我在Android应用程序中有1个活动和2个片段。 在第一个片段上,我确实放了一个按钮(btnA)。 在第二个屏幕上,我放置了一个TextView(txtB) 如何通过按下第一个活动上的按钮在第二个片段的TextView中设置文本 Thx,我是android应用程序开发新手 JoskXP您可以这样做: 在活动中,提供指向两个片段的公共链接: public FragmentNumberOne getFragmentOne() { return fragOne; } public Frag

我在Android应用程序中有1个活动和2个片段。 在第一个片段上,我确实放了一个按钮(btnA)。 在第二个屏幕上,我放置了一个TextView(txtB)

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

Thx,我是android应用程序开发新手


JoskXP

您可以这样做:

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

public FragmentNumberOne getFragmentOne() {
    return fragOne;
}

public FragmentNumberTwo getFragmentTwo() {
    return fragTwo;
}
然后为片段一的
片段
类中的
文本视图
提供访问器:

public TextView getTextView() {
    return mTextView;
}
在原始的
片段中
可以使用:

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

下面介绍了Android的最佳实践

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

您有两个片段(
FragmentWithButton
FragmentWithText
)和一个活动(
MyActivity

  • FragmentWithButton
    中创建界面
    FragmentWithButtonHost

    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);
        }
    }
    
  • FragmentWithText
    中创建public方法,以设置活动中的文本:

    public class FragmentWithText extends Fragment{
    
          ...
    
          public void setText(String text) {
               // Set text displayed on the fragment
          }
    }
    
  • 确保您的活动实现了
    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
        }
    }
    

  • 在这里阅读有关片段的文章,在那里阅读,示例文章正是您所要求的!你应该读到这只是典型的Android团队试图让事情变得比它需要的更复杂:上面的例子工作方式完全相同,但你可以一目了然地了解它在做什么。它可能有点复杂,但你的方法将FragmentNumberOne与FragmentNumberTwo紧密耦合。如果没有另一个,你就不能使用一个。它只是按照需要紧密耦合(使用B需要A和B)。其中,如链接中的示例所示,您需要描述每个可能片段的每个函数(片段A、B、C、D、E及其每个函数集,1、2、3将给出A1、A2、A3、B1、B2等)。您可以对活动中的片段使用公共方法。您需要描述的是片段可以生成的事件(例如
    onButtonClick
    )。理想情况下,片段之间不应该有直接通信,活动应该是调度器