我试图有一个弹出窗口,我可以改变一个延迟,从这里我按一个按钮,直到图像显示。我已经读到了编辑文本和文本处理程序应该达到的目的,但是我一直得到一个NullPointerExeption。
这是您在设置中并试图设置延迟的部分。
else if(id == R.id.action_settings){
LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View setpopView = layoutInflater.inflate(R.layout.setpop, null);
final PopupWindow setpopWindow = new PopupWindow(setpopView,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
setpopWindow.setFocusable(true);
setpopWindow.update();
EditText delayTime = (EditText) setpopView.findViewById(R.id.editText1);
delayTime.setText("" + timerTime);
timerTime = Integer.parseInt(delayTime.getText().toString());
delayTime.addTextChangedListener(new TextWatcher() {
EditText delayTime = (EditText) findViewById(R.id.editText1);
public void afterTextChanged(Editable s) {
delayTime.setText("" + timerTime);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
//TODO Auto-generated method stub
}
});
((TextView)setpopWindow.getContentView().findViewById(R.id.textDelay2)).setText("Current delay: " + timerTime + "sec");
Button btnDismiss = (Button)setpopView.findViewById(R.id.setDismiss);
btnDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v){
//TODO Auto-generated method stub
setpopWindow.dismiss();
}
});
setpopWindow.showAsDropDown(btnDismiss, 50, 50);
}xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="5dp"
android:background="@android:color/black"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:layout_width="230dp"
android:layout_height="300dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="2dp"
android:background="@android:color/darker_gray"
android:orientation="vertical" >
<Button
android:id="@+id/setDismiss"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="Back" />
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" Settings"
android:textSize="22sp" />
</RelativeLayout>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar"
android:layout_centerHorizontal="true"
android:layout_marginTop="27dp"
android:text="" />
<TextView
android:id="@+id/textDelay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/relativeLayout1"
android:layout_below="@+id/relativeLayout1"
android:text="Set result delay (sec)" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textDelay"
android:layout_centerHorizontal="true"
android:ems="10"
android:inputType="number"
android:text="" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textDelay2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textDelay"
android:layout_below="@+id/editText1"
android:layout_marginTop="16dp"
android:text="" />
</RelativeLayout>
LogCat
11-10 03:30:00.776: E/AndroidRuntime(30751): FATAL EXCEPTION: main
11-10 03:30:00.776: E/AndroidRuntime(30751): Process: com.gerfort.gerfortrps, PID: 30751
11-10 03:30:00.776: E/AndroidRuntime(30751): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
11-10 03:30:00.776: E/AndroidRuntime(30751): at com.gerfort.gerfortrps.MainActivity$14.afterTextChanged(MainActivity.java:413)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.widget.TextView.sendAfterTextChanged(TextView.java:7472)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:9246)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:957)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:501)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:216)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:33)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.view.inputmethod.BaseInputConnection.deleteSurroundingText(BaseInputConnection.java:243)
11-10 03:30:00.776: E/AndroidRuntime(30751): at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:382)
11-10 03:30:00.776: E/AndroidRuntime(30751): at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.os.Handler.dispatchMessage(Handler.java:102)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.os.Looper.loop(Looper.java:135)
11-10 03:30:00.776: E/AndroidRuntime(30751): at android.app.ActivityThread.main(ActivityThread.java:5070)
11-10 03:30:00.776: E/AndroidRuntime(30751): at java.lang.reflect.Method.invoke(Native Method)
11-10 03:30:00.776: E/AndroidRuntime(30751): at java.lang.reflect.Method.invoke(Method.java:372)
11-10 03:30:00.776: E/AndroidRuntime(30751): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
11-10 03:30:00.776: E/AndroidRuntime(30751): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)当我试图编辑这篇文章时,它一直在崩溃。有什么想法吗?提前感谢!
发布于 2014-11-10 10:43:11
试着像这样
final EditText delayTime = (EditText) setpopView.findViewById(R.id.editText1);
delayTime.setText(String.valueOf(timerTime));
timerTime = Integer.parseInt(delayTime.getText().toString());
delayTime.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if(!s.toString().trim().equalsIgnoreCase("")) {
timerTime = Integer.parseInt(s.toString().trim());
//delayTime.setText(String.valueOf(timerTime));
} else {
timerTime = 0;//set initial value of timerTime
//delayTime.setText(String.valueOf(timerTime));
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
//TODO Auto-generated method stub
}
});发布于 2014-11-10 10:11:09
有时,findViewById的作用就像异步调用。我建议你换衣服
EditText delayTime = (EditText) setpopView.findViewById(R.id.editText1);至
final EditText delayTime = (EditText) setpopView.findViewById(R.id.editText1);移除
EditText delayTime = (EditText) findViewById(R.id.editText1);
在……下面
delayTime.addTextChangedListener(new TextWatcher() {
**EditText delayTime = (EditText) findViewById(R.id.editText1);**发布于 2014-11-10 10:12:57
您所做的每一个输入都被"“和一个NullString所取代。原因是
delayTime.setText("" + timerTime);本身调用
afterTextChanged(Editable s)并将EditText替换为
"" + timerTime这是空的。所以不要调用setText(),而是尝试如下所示
afterTextChanged(Editable s){
char lastCharacter = s.charAt(s.length() - 1);
if (lastCharacter == '\n') {
timerTime = Integer.parseInt(s);
}
}'\n‘表示enter按钮。
https://stackoverflow.com/questions/26840791
复制相似问题