2016-01-16 19 views
-1
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; 
} 
} 

使用的setText()得到一个显示java.lang.NullPointerException我想改变我通过TextView的

TextView datumText; 

文本每当我做在屏幕上的TextView的onFling运动。但我得到一个NullPointerException,我认为这是因为我试图调用null对象的setText()方法。

在此先感谢!

编辑:忘了提及我使用MainActivity类和第二类。编辑2:我知道是什么NullPointerException是由,但我不知道如何解决它。

+0

看起来你有你的XML文件 – Jens

+0

什么叫次活动指的是什么问题? – Shahar

+0

我有一个MainActivity类,其中onCreate方法位于另一个名为手势的GestureListener类。我遵循这个在TextView上使用手势:http://stackoverflow.com/questions/25594826/gesturedetector-bound-to-a-textview-in-a-fragment – GeeSplit

回答

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; } 
0

不创建MainActivity的这样的一个新的实例: MainActivity mainActivity =新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; } 
+0

这没有奏效,我得到了同样的错误。 – GeeSplit