当我这样做时,我得到Null Point Exception:
String Serial = SerialField.getText().toString();
以下是代码:
public static class PointCreation extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.point_creation, container, false);
Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
buttonGuardar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao guardar", Toast.LENGTH_LONG).show();
final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
final EditText ObservationField = (EditText) view.findViewById(R.id.Observation);
String Serial = SerialField.getText().toString();
String Observation = ObservationField.getText().toString();
pointsList.add(new Point("Serial", Observation, false, 1, 2, 3, 4,
5, 6, 7, 8, 9));
Toast.makeText(getActivity().getApplicationContext(), Observation, Toast.LENGTH_LONG).show();
}
});
Button buttonApagar = (Button) view.findViewById(R.id.buttonApagar);
buttonApagar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao apagar", Toast.LENGTH_LONG).show();
}
});
return view;
}
}
这里是xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/serial"
android:layout_width="150dp"
android:layout_height="45dp"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center"
android:text="Serial"
/>
<EditText
android:id="@+id/Serial"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/serial"
android:inputType="text"
android:layout_width="fill_parent"
>
</EditText>
<TextView
android:id="@+id/Observations"
android:layout_width="150dp"
android:layout_height="45dp"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center"
android:layout_below="@+id/serial"
android:text="Observações" />
<EditText
android:id="@+id/Observation"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/Observations"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_below="@+id/serial"
>
</EditText>
</RelativeLayout>
logcat的:
04-09 17:07:38.639 14736-14736/com.example.testlayout.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.testlayout.app, PID: 14736
java.lang.NullPointerException
at com.example.testlayout.app.PointsList$PointCreation$1.onClick(PointsList.java:120)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:5)
因为在这种情况下view
是您的按钮。将onClickListener中的视图重命名为其他内容,它应该可以正常工作
答案 1 :(得分:0)
您需要将其移出按钮onClick
EditText SerialField = (EditText) view.findViewById(R.id.Serial);
它正在寻找EditText
作为Button
的孩子而不是这种情况会发生什么
所以它应该是
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.point_creation, container, false);
final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
final EditText ObservationField = (EditText) view.findViewById(R.id.Observation);
Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
buttonGuardar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao guardar", Toast.LENGTH_LONG).show();
String Serial = SerialField.getText().toString();
String Observation = ObservationField.getText().toString();
pointsList.add(new Point("Serial", Observation, false, 1, 2, 3, 4,
5, 6, 7, 8, 9));
Toast.makeText(getActivity().getApplicationContext(), Observation, Toast.LENGTH_LONG).show();
}
});
Button buttonApagar = (Button) view.findViewById(R.id.buttonApagar);
buttonApagar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao apagar", Toast.LENGTH_LONG).show();
}
});
return view;
}
编辑:
tyczj指出你可以重命名
@Override
public void onClick(View view)
到
@Override
public void onClick(View v)
并将View view
更改为final View view
。但是,无需每次EditText
点击
Button
答案 2 :(得分:0)
试试这个
private EditText SerialField;
private EditText ObservationField;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.point_creation, container, false);
SerialField = (EditText) view
.findViewById(R.id.Serial);
ObservationField = (EditText) view
.findViewById(R.id.Observation);
Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
buttonGuardar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity().getApplicationContext(),
"tou a carregar no botao guardar", Toast.LENGTH_LONG)
.show();
String Serial = SerialField.getText().toString();
String Observation = ObservationField.getText().toString();
pointsList.add(new Point("Serial", Observation, false, 1, 2, 3,
4, 5, 6, 7, 8, 9));
Toast.makeText(getActivity().getApplicationContext(),
Observation, Toast.LENGTH_LONG).show();
}
});
Button buttonApagar = (Button) view.findViewById(R.id.buttonApagar);
buttonApagar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity().getApplicationContext(),
"tou a carregar no botao apagar", Toast.LENGTH_LONG)
.show();
}
});
return view;
}
答案 3 :(得分:0)
想想这里发生的事情:
View view = inflater.inflate(R.layout.point_creation, container, false);
Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
buttonGuardar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { //Hello view
Toast.makeText(getActivity().getApplicationContext(), "tou a carregar no botao guardar", Toast.LENGTH_LONG).show();
final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
您正试图从点击的视图中找到该视图,因为所点击的视图正在传递给onClick
方法。
解决方案:
尝试在onCreateView中初始化您的EditText而不是onClick,并将其设为全局,如下所示:
EditText SerialField, ObservationField;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.point_creation, container, false);
SerialField = (EditText) view.findViewById(R.id.Serial);
ObservationField = (EditText) view.findViewById(R.id.Observation);
Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
答案 4 :(得分:0)
将这两行移出setOnClickListener
final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
final EditText ObservationField = (EditText) view.findViewById(R.id.Observation);
它会起作用..
试一试......