3

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

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

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

约斯克XP

4

2 回答 2

2

遵循此处描述的 Android 最佳实践。

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

你有两个片段(FragmentWithButtonFragmentWithText)和一个活动(MyActivity

  1. 在中创建一个接口FragmentWithButtonHostFragmentWithButton

    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. 在 Activity 中创建一个公共方法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;
}

然后在片段一TextViewFragment类中提供访问器:

public TextView getTextView() {
    return mTextView;
}

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

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