public class MainActivity extends Activity{
TextView datumText;
GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Gestures
datumText = (TextView) findViewById(R.id.datumText);
datumText.setText("ma");
gestureDetector = new GestureDetector(this, new GestureListener());
datumText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return true;
}
});
}
}
class GestureListener implements GestureDetector.OnGestureListener{
MainActivity mainActivity = new MainActivity();
public GestureListener(){
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
mainActivity.datumText.setText("di");
return true;
}
}
我想更改
上的文字TextView datumText;
每当我在屏幕上的TextView上进行onFling运动时。但我得到一个NullPointerException,我认为这是因为我试图在null对象上调用setText()方法。
提前致谢!
编辑:忘记提及我使用MainActivity类和第二类。 EDIT2:我知道NullPointerException是由什么引起的,但我不知道如何解决它。
答案 0 :(得分:0)
您正在创建MainActivity的新实例,并且不会将任何布局扩展到该实例,您尝试访问在新创建的MainActivity实例中甚至不存在的TextView。只需将你的onFling()改为
即可 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
datumText.setText("di"); // you don't need to create instance of your MainActivity to access the TextView
return true; }
答案 1 :(得分:0)
不要像这样创建一个新的MainActivity实例: MainActivity mainActivity = new MainActivity();
如果您愿意,可以传递TextView本身。
class GestureListener implements GestureDetector.OnGestureListener{
...
...
TextView tv;
public void setTextView(Textview tv){
this.tv = tv;
}
...
}
然后执行类似
的操作 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
tv.setText("di");
return true; }