Android - 从 Activity 中的 Fragment 设置按钮文本

Android - set button text from Fragment in Activity

我在 Android Studio 2.2.2 中使用 Navigation Drawer Activity 模板创建了新项目。我决定使用 FrameLayout,因此当我单击导航菜单项时,会加载新片段。

在我的 content_main.xml 中,我有这样的 FrameLayout 元素:

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

这是将显示内容的框架。

然后我有布局 fragment_one.xml 和它的 class FragmentOne 它们看起来像这样:

fragment_one.xml

<Button
    android:text="Default Button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/mybutton" />

片段一class

public class FragmentOne extends Fragment {

    Button btn;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_one, container, false);
        btn = (Button) view.findViewById(R.id.mybutton);
        return view;
    }

    public void changeBtnText(String txt)
    {
        btn.setText(txt);
    }
}

MainActivity 的 onCreate() 方法中我有代码:

    FragmentManager fm = getSupportFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, new FragmentOne()).commit();

    FragmentOne fragment_obj = (FragmentOne)getSupportFragmentManager().
            findFragmentById(R.id.frOne);
    fragment_obj.changeBtnText("Changed text");

这里我得到错误:

Attempt to invoke virtual method 'void com.example.user.myapplication.FragmentOne.changeBtnText(java.lang.String)' on a null object reference

如何使用 changeBtnText(String txt) 方法从 Main Activity 更改片段的 Button 文本

在不在 activity.

的片段内调用 changeBtnText(String txt)

编辑:

里面FragmentOne.class

public FragmentOne newInstance(String text) {
    FragmentOne fragmentOne = new FragmentOne ();

    Bundle args = new Bundle();
    args.putInt("text", text);
    fragmentOne .setArguments(args);

    return fragmentOne ;
}

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    btn = (Button) view.findViewById(R.id.mybutton);

    String text = getArguments().getString("text", null);
    changeBtnText(text);

    return view;
}

在Activity

FragmentManager fm = getSupportFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, FragmentOne.newInstance("text")).commit();

您尚未创建 Fragment,这就是它为空的原因。您在线创建了一个新的但不保存它。

试试这个;

FragmentOne fragment_obj = new FragmentOne();
FragmentManager fm = getSupportFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, fragmentOne).commit();

fragment_obj.changeBtnText("Changed text");