【问题标题】:Get data from EditText from Fragment to Activity从 Fragment 到 Activity 从 EditText 获取数据
【发布时间】:2019-06-23 13:05:37
【问题描述】:

我需要将来自EditTexts的String数据从Fragment传递给Activity,我知道我必须使用interface。但我仍然有同样的错误(Null Object)。你能告诉我如何解决吗?这是我的代码:

Main Activity

public class IntroActivity extends AppCompatActivity implements fragment_intro_activity_2.OnDataPass {

    Button button_intro;
    EditText et;
    boolean showingFirst;
    String wynik;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intro);

        button_intro = findViewById(R.id.button_intro);
        et = findViewById(R.id.edOperetka);

     FullScreencall();

        getSupportFragmentManager().beginTransaction().replace(R.id.frame_contrainer_intro,
                new fragment_intro_activity_1()).commit();

       showingFirst = true;


       button_intro.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {

               if(showingFirst==true){
                   getSupportFragmentManager().beginTransaction().replace(R.id.frame_contrainer_intro,
                           new fragment_intro_activity_2()).commit();
                   showingFirst = false;
               }else {
//
//                   Toast.makeText(IntroActivity.this, "123123",  Toast.LENGTH_SHORT).show();
                   wynik = et.getText().toString();
            onDataPass(wynik);
               }
           }
       });
    }

Fragment

public class fragment_intro_activity_2 extends Fragment {

    View v;
    OnDataPass dataPasser;


    public fragment_intro_activity_2() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        v = inflater.inflate(R.layout.fragment_fragment_intro_activity_2, container, false);
        return v;
    }
    public interface OnDataPass {
         void onDataPass(String data);
    }


    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        dataPasser = (OnDataPass) context;
    }
    public void passData(String data) {
        dataPasser.onDataPass(data);
    }

}

Logcat

Process: com.example.wynagrodzeniedodatkowe, PID: 32263
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.example.wynagrodzeniedodatkowe.IntroActivity$1.onClick(IntroActivity.java:54

这 54 行是这样的:wynik = et.getText().toString();

【问题讨论】:

  • 发布您的logcat 错误
  • @Swati - 我有问题地添加了它
  • 片段中是否有编辑文本?
  • 是的,先生。我试图在片段(String wynik = et.v.findVievbyId(ID)中做到这一点。但我不知道如何将数据传递给 Button(它在 Activity 中)

标签: java android interface


【解决方案1】:

查看 logcat 消息,它告诉我以下行

findViewById(R.id.edOperetka)

返回 null,因此请确保在 XML 中正确创建 ID 并从代码中正确引用(它是相同的 ID)。

如果您不想在片段中检索 EditText,您可以执行以下操作。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    v = inflater.inflate(R.layout.fragment_fragment_intro_activity_2, container, false);

    EditText et = v.findViewById(R.id.edOperetka);

    return v;
}

现在您可以像以前一样检索文本。

【讨论】:

  • 如何在Activity的Fragment中引用EditText?
  • @Formaxinho 在 onCreateView(...) 你可以调用 v.findViewById(...)。
  • 谢谢 Ludvig,我可以在 Fragment 上完成。但是如何从 EditText 中获取文本。我认为我应该了解更多关于接口的知识,但是如果您对我的问题有线索,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2012-06-12
  • 2018-10-02
相关资源
最近更新 更多