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

问题描述 投票:2回答:2

我在一个Android应用中有1个活动,包含2个片段。在第一个片段上,我确实放了一个按钮(btnA)。在第二个我推了一个TextView(txtB)。

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

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

JoskXP

android android-fragmentactivity
2个回答
2
投票

好吧,你可以做这样的事情:

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

public FragmentNumberOne getFragmentOne() {
    return fragOne;
}

public FragmentNumberTwo getFragmentTwo() {
    return fragTwo;
}

然后在片段一的TextView类中提供对Fragment的访问器:

public TextView getTextView() {
    return mTextView;
}

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

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

2
投票

遵循here所述的Android最佳实践。

这比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方法以设置活动中的文本:

    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
        }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.