在替换片段后,我无法从片段中的edittext获取数据

时间:2015-06-13 14:55:33

标签: android android-edittext fragment

我有两个带有edittext的片段,来自第一个edittext的数据,但是在我调用第二个片段之后,我无法从第二个片段中的edittext获取数据。 Logcat说我第二个edittext的数据是无效的。

这是第一个片段类

package com.example.n;

import android.annotation.TargetApi;
import android.app.Fragment;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;


@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class FragmentAdd extends Fragment {
    EditText et1;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.frag_add, container, false);
            et1 = (EditText) rootView.findViewById(R.id.editText);
            return rootView ;
        }

}

这是第二个片段类

    package com.example.n;

import android.annotation.TargetApi;
import android.app.Fragment;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;


@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class FragmentAdd2 extends Fragment {
    EditText et2;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.frag_add2, container, false);
        et2 = (EditText) rootView.findViewById(R.id.editText2);

        return rootView ;
    }

    public String getEditText(){
        /*FragmentAdd2 fragmentAdd3 = new FragmentAdd2();
        String data =  fragmentAdd3.et2.getText().toString();*/
        String data = et2.getText().toString();
        return data;
    }

}

这是主要课程的一部分

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public void onClick(View view){
    FragmentAdd fragmentAdd = new FragmentAdd(); 
    String data =  fragmentAdd.et1.getText().toString();
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public void onClick(View view){
    FragmentAdd2 fragmentAdd2 = new FragmentAdd2(); 
    String data =  fragmentAdd2.et2.getText().toString();
}

*LogCat*


java.lang.IllegalStateException: Could not execute method of the activity
Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

2 个答案:

答案 0 :(得分:1)

从活动访问片段方法的正确方法是

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.methodName(); 

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag("Your Tag");
fragment.methodName(); 

“您的代码”是您在添加或替换Fragment时在参数中传递的代码。

答案 1 :(得分:0)

FragmentAdd2 fragmentAdd2 = new FragmentAdd2(); //new fragment instance
String data =  fragmentAdd2.et2.getText().toString();

上面的代码指向不同的Fragment,如果您想从Fragment获取文本,您需要指向您添加到交易中的Fragment,这将获得摆脱 NPE 以获取Fragment您可以使用TagFragmentManager

假设您添加片段时使用Transaction.add(int,Fragment,tag) 现在,您可以在FragmentManager.findFragmentByTag(tag)后使用EditText调用您的片段,因为您希望Fragment将其投射到首选FragmentAdd2类.ie。 FragmentAdd$_Session然后您可以检索您的内容。

希望有所帮助

相关问题