Android Fragment忘记按钮

Posted

技术标签:

【中文标题】Android Fragment忘记按钮【英文标题】:Android Fragment forgets button 【发布时间】:2014-11-19 12:53:03 【问题描述】:

我的片段初始化按钮,我可以在调试器中看到它。 当我从布局中包含片段的活动中调用 setButtonText 方法时,按钮变为空。我在网上查过,但到目前为止我没有找到任何解决方案

public class PrepareTrainingFragment extends Fragment

private Button button;
private TextView tv;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)

    View v = inflater.inflate(R.layout.preparetrainingfragment, container, false);
    button=(Button) v.findViewById(R.id.ptfragmentbtn);
    Log.w("button init","button init");
    return v;


public void setButtonText(String text)

    button.setText(text);

在封装片段的类中:

@Override
protected void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
//  getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); //hide navigation bar temporarily


    driverFragment=new PrepareTrainingFragment();


    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = 
    fragmentManager.beginTransaction();

    fragmentTransaction.replace(android.R.id.content, driverFragment);

    driverFragment.setButtonText("hello");


       

【问题讨论】:

【参考方案1】:

FragmentTransaction 不是实时执行的,你必须调用 boolean result = fragmentTransaction.executePendingTransactions();在更新您的按钮之前。另外,为什么不更新 Fragment 中的按钮?

【讨论】:

因为有时需要从其他类中更改按钮上的文本 executePendingTransactions 解决问题了吗? 不,不是,顺便说一句,它不是 fragmentManager.executePendingTransactions() 吗?我只想使用片段来重用其中的代码... 您的 Activity 是否具有与 Fragment 通信的接口? 尝试传递消息。一个警告:这将使您的片段依赖于活动,这不是推荐的设计。我让我的片段以这种方式相互交谈。

以上是关于Android Fragment忘记按钮的主要内容,如果未能解决你的问题,请参考以下文章

Fragment

Android Fragment 的使用,一些你不可不知的注意事项

死磕 Fragment 的生命周期

在通知单击时启动 Fragment 而不会丢失状态

Android Fragment onClick 按钮打开具有相同活动的新 Fragment

Fragment的生命周期