Android: невозможно обновить текстовое представление текста динамически из onTouchEvent - PullRequest
0 голосов
/ 18 января 2012

Я работаю над приложением, которое позволяет пользователю перетаскивать точку на экране и устанавливать значения расстояния, например.То, что я хочу, это иметь половину экрана для функции перетаскивания, а другую половину с гаджетами (кнопки и textViews).Для этого я создал класс, расширяющий SurfaceView, использовал растровое изображение «точка» и функцию onTouchEvent, и в своем XML-файле я ссылался следующим образом:

 <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"
  />

Что дает мне то, что я хочу.Но теперь я хочу динамически обновить положение точки.Для этого я добавил функцию setText () для моего textView в моей функции onTouchEvent:

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

, это дает мне ошибки типа

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)

Я не могу использовать свой textView в своем классе DragView.Это нормально?Я могу предоставить больше объяснений, если необходимо.

РЕДАКТИРОВАТЬ: После использования решения ReubenScratton я могу получить доступ к моему textView сейчас, но я получаю следующую ошибку:

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)

1 Ответ

1 голос
/ 19 января 2012

Я отвечаю на свой вопрос, но учтите, что я просто собираю решения, предоставленные другими ( ReubenScratton и lazeR ), чтобы, если у кого-то еще возникла такая же проблемаон найдет все решение.Таким образом, решение: прежде всего вместо прямого доступа к моему textView, я должен был использовать

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

, потому что если вы используете

tv=(TextView)findViewById();

Вы используете View.findViewById(), который будетпоиск только по дочерним видам.

Вы хотите использовать Activity.findViewById() ReubenScratton

И для моей второй проблемы, когда я использовал непосредственный int для функции setText(), она не работалано благодаря комментарию lazeR я заметил это и нашел решение.Спасибо всем, кто мне помог:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...