2012-01-18 3 views
0

사용자가 화면에서 점을 드래그하고 거리 값을 설정할 수있는 응용 프로그램에서 작업 중입니다. 내가 원하는 건 드래그 기능을위한 절반 화면과 가젯 (버튼과 textViews)을 가진 나머지 절반을 갖는 것이다. 그래서, 서피스 뷰 SurfaceView를 확장하는 클래스를 생성 한 비트 맵 "점"과 기능 onTouchEvent를 사용 내 XML 파일에 내보기에 다음과 같이 참조 수행합니다Android : onTouchEvent에서 동적으로 textView 텍스트를 업데이트 할 수 없습니다.

<test1.DragView 
     android:id="@+id/view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 
<TextView 
      android:id="@+id/textView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 

내가 원하는 걸 수 있습니다. 하지만 이제 점의 위치를 ​​동적으로 업데이트하려고합니다. 이렇게하려면 내 onTouchEvent 함수 내 텍스트 뷰에 대한의 setText() 함수를 추가 : 그것은

AndroidRuntime(845): FATAL EXCEPTION: main 
AndroidRuntime(845): java.lang.NullPointerException 
AndroidRuntime(845):  
at test1.DragView.onTouchEvent(DragView.java:87) 
AndroidRuntime(845):  
at android.view.View.dispatchTouchEvent(View.java:5462) 
AndroidRuntime(845): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953) 

처럼 나에게 오류를 제공

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    x=(int)event.getX(); 
    y=(int)event.getY(); 
    bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.dot); 
    if(x<0) 
     x=0; 
    if(x > width+(bitmap.getWidth()/2)) 
     x=width+(bitmap.getWidth()/2); 
    if(y <0) 
     y=0; 
    if(y > height/2) 
     y=height/2; 
    tv=(TextView) findViewById(R.id.textView); //I declared tv in the beginning of my class 
    tv.setText(x); 
    updateBall(); //it's a function that resets the position of the dot 

    return true; 
} 

내 DragView 클래스에서 내 텍스트 뷰를 사용할 수 없습니다. 정상입니까? 필요한 경우 더 자세한 설명을 제공 할 수 있습니다.

편집 : 지금 내 텍스트 뷰를 액세서 수 ReubenScratton의 솔루션을 사용 후, 그러나 나는 다음과 같은 오류 받고 있어요 : 나는 내 자신의 질문에 대답하지만 난 그냥 짜고있어주의하고

AndroidRuntime(672): FATAL EXCEPTION: main 
AndroidRuntime(672): android.content.res.Resources$NotFoundException: String resource ID #0x109 
AndroidRuntime(672): at android.content.res.Resources.getText(Resources.java:247) 
AndroidRuntime(672): at android.widget.TextView.setText(TextView.java:3427) 
AndroidRuntime(672): at test1.DragView.onDraw(DragView.java:73) 
+3

'setText()'와 logcat 출력을 호출 할 곳에서 코드 조각을 제공 할 수 있다면 편리 할 것입니다. – mdelolmo

+0

"NullPointerException 같은 오류가 발생합니다"- NPE를 생성하는 코드와 예외의 스택 추적을 제공하지 않으면 어떻게하면 도움이 될 것으로 기대합니까? LogCat은 적어도 – Guillaume

+0

@ Guillaume이 맞습니다. 나는 나의 질문을 편집했다. – Anila

답변

1

을 (ReubenScrattonlazeR) 다른 사람이 동일한 문제를 겪고 있으면 전체 솔루션을 찾을 수 있습니다. 그래서 해결책은 : 먼저 대신에 액세스하는 바로 당신이

tv=(TextView)findViewById(); 

를 사용하는 경우에만 아이 뷰를 검색합니다 View.findViewById()를 사용하고 있기 때문에

tv=(TextView) ((Activity)getContext()).findViewById(R.id.textView) 

을 사용했다 textView 내.

당신은 Activity.findViewById()ReubenScratton

를 사용할 그리고 내 두 번째 문제에 대해 내가 직접 내가 그것을 발견 LAZER의 의견에 IT가 작동되지 않은 setText() 기능 INT하지만 덕분에 사용되면서 해결책을 찾았습니다. 나를 도와 주신 모든 분들께 감사드립니다. :).

관련 문제