我有两个带有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
答案 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
您可以使用Tag
和FragmentManager
假设您添加片段时使用Transaction.add(int,Fragment,tag)
现在,您可以在FragmentManager.findFragmentByTag(tag)
后使用EditText
调用您的片段,因为您希望Fragment
将其投射到首选FragmentAdd2
类.ie。 FragmentAdd
或$_Session
然后您可以检索您的内容。
希望有所帮助