【问题标题】:Edit EditText in Fragment from MainActivity从 MainActivity 编辑片段中的 EditText
【发布时间】:2015-11-04 07:33:38
【问题描述】:

我试图用我从服务中获得的数据替换与片段连接的文本视图。但即使我在 Activity 中使用 LayoutInflator 来编辑这些编辑文本,我也无法更改它们。我所了解的是,我需要从片段中更改它们,但我需要为此将数据从活动发送到片段,而我无法再次实现。

这是我在 MainActivity

onCreate 中编写的代码行
        LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View mView = layoutInflater.inflate(R.layout.tab_designreservation, null);

        Bundle extrasofuser = getIntent().getExtras();
        nameofuser = extrasofuser.getString("nameofuser").toString();
        surnameofuser = extrasofuser.getString("surnameofuser").toString();

        EditText enum_of_name = (EditText) mView.findViewById(R.id.et_name);
        EditText enum_of_surname = (EditText) mView.findViewById(R.id.et_surname);

        enum_of_name.setText(nameofuser);
        enum_of_surname.setText(surnameofuser);

据我所知,我需要将这些字符串变量发送到片段,但我做不到。感谢您的帮助!!

【问题讨论】:

    标签: java android android-fragments android-intent bundle


    【解决方案1】:

    如果我很好地理解了您的问题,您需要在 Activity 的 Fragment 中设置 editText 的文本。 一种方法是在您的活动中保留片段的引用。

         private MyFragment mFragment;
    
         @Override
         protected void onCreate(Bundle savedInstanceState) {
            ...
            mFragment = new MyFragment();
            ...
         }
    

    然后在您的片段类中创建一个方法来更改 EditText 文本:

         public void changeEditTextContent(Bundle extras){
              String nameofuser = extrasofuser.getString("nameofuser").toString();
              String surnameofuser = extrasofuser.getString("surnameofuser").toString();
    
               EditText enum_of_name = (EditText) rootView.findViewById(R.id.et_name);
               EditText enum_of_surname = (EditText) rootView.findViewById(R.id.et_surname);
    
               enum_of_name.setText(nameofuser);
               enum_of_surname.setText(surnameofuser);
         }
    

    最后,您可以从您的活动中调用此方法:

         Bundle extrasofuser = getIntent().getExtras();
         mFragment.changeEditTextContent(extrasofuser);
    

    【讨论】:

    • 是的,你理解正确,但我仍然收到错误消息----“尝试在 null 上调用虚拟方法 'void android.widget.EditText.setText(java.lang.CharSequence)'对象引用” -----
    • 那是因为它没有在您的布局中找到 EditTexts。那些 editText 在 Activity 中还是在片段中?如果您可以发布您的活动和片段代码,那就太好了
    • 我的片段现在处于默认模式。我还没有在那里写任何东西。我试图将它们从活动中更改,并且我在问题上添加的代码行已经来自 MainActivity。我知道我需要从 Fragment 更改 EditTextes,但问题是我无法将任何数据从活动发送到片段。
    • 您必须对片段进行编码。就像我写的那样,它应该可以工作,或者如果您在显示片段之前拥有所需的数据,您可以使用 Bundle 将其作为 Extra 发送,但您必须对片段进行编码才能接收它
    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多