【问题标题】:changing fragment's textview from activity does not update UI从活动更改片段的文本视图不会更新 UI
【发布时间】:2018-03-31 23:29:46
【问题描述】:

我正在尝试做一些看起来很实用的事情(f.i. 这里,second answer)。但是,虽然数据被传输并且可以放入 f.i.进入viewmodel,android似乎并不关心我改变了textview的文本。这是我的代码(我更喜欢数据绑定而不是 findviewbyid):

活动:

@Override
public void onItemSelected(String param) {
    MainFragment oFragment = (MainFragment) getSupportFragmentManager().findFragmentByTag(MainFragmentTag);
    if(oFragment != null) {
        oFragment.SetText(param);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(oBinding.mainContainer.getId(), oFragment)
                .addToBackStack(null)
                .commit();
    }
}

接收片段:

public void SetText(String param) {
    String sInput = oBinding.MyInputField.getText().toString();

    oBinding.TextviewIWantToChange.setText(param);
    Entry oEntry = Manager.CreateEntry(sInput, param);
    viewmodel.Insert(oEntry);
}

旧片段实例出现,正确的参数被传输,视图模型插入工作顺利。但是文本视图没有更新。有什么想法吗?

【问题讨论】:

    标签: android android-fragments android-databinding


    【解决方案1】:

    使用 Fragment 参数传递您的数据并读取另一个片段 getArguments

    @Override
                    public void onItemSelected(String param) {
                        MainFragment oFragment = (MainFragment) getSupportFragmentManager().findFragmentByTag(MainFragmentTag);
                        if(oFragment != null) {
    
                            Bundle bundle=new Bundle();
                            bundle.putString("param",param);
                            oFragment.setArguments(bundle);
                            getSupportFragmentManager()
                                    .beginTransaction()
                                    .replace(oBinding.mainContainer.getId(), oFragment)
                                    .addToBackStack(null)
                                    .commit();
                        }
                    }
    

    // 在你需要的片段上调用这个

    public void SetText(String param) {
            String sInput = oBinding.MyInputField.getText().toString();
    
            oBinding.TextviewIWantToChange.setText(param);
            Entry oEntry = Manager.CreateEntry(sInput, param);
            viewmodel.Insert(oEntry);
        }
    

    在 OnCreateView 上调用这个方法

    final Bundle bundle = getArguments();
     String param = bundle.getString("param");
    

    【讨论】:

    • 谢谢你,这行得通!不过我想知道 - 是否只能在 OnCreateView 方法中操作视图?这似乎非常有限,f.i.当我并排使用两个片段并且我要更新的片段不是通过提交重新创建时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多