2015-06-05 2 views
0

Я просмотрел несколько вопросов SO и пару учебников.GLSurfaceView с TextView - исключение null указателя в SetText

Я отследил проблему, я думаю, в контексте. Возможно, решение, возможно, редактирует мой xml-файл, но ничего, что я нахожу в этом, помогает устранить мою проблему.

В моем основном действии с onCreate я пытаюсь получить ссылку на мой единственный объект текстового вида. Это возвращает нулевую ссылку. Как получить действительную ссылку на текстовое изображение, которое я вручную разместил?Я не знаю, правильно ли я добавил этот текст; должен ли я добавить его через код или что-то еще?

Вот и мои onCreate и XML.

protected void onCreate(Bundle savedInstanceState) { 
     Log.i("[DEBUG]", "main activity - started"); 
     super.onCreate(savedInstanceState); 
     s_textView = (TextView)findViewById(R.id.textView); 
     m_GLView = new MyGLSurfaceView(this); 
     setContentView(m_GLView); 
     s_textView = (TextView)findViewById(R.id.textView); 
     Log.i("[DEBUG]", "main activity - finished"); 
    } 

Я также попробовал следующую строку s_textView = (TextView)m_GLView.findViewById(R.id.textView);

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <merge> 
     <com.example.a2_1039652.a2_cooper.MyGLSurfaceView /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/textView" 
      android:layout_centerVertical="true" 
      android:layout_centerHorizontal="true" 
      android:textSize="20dp" /> 
    </merge> 
</RelativeLayout> 

Я только добавил эту <com.example.a2_1039652.a2_cooper.MyGLSurfaceView /> линии, потому что это было решение подобной проблемы. Похоже, что ничего не изменило мое приложение.

ответ

0

Таким образом, после нескольких часов отдыха, я смог придумать правильную строку слов, чтобы найти SO вопрос с раствором. Решение было найдено в этом вопросе, сам нашел здесь: Drawing Android UI on top of GLSurfaceView

Я неясными от того, есть ответ на мой вопрос. Однако для конечного результата мне нужен текстовый вид, и теперь у меня есть тот, на который я могу установить текст. Вот как я это сделал.

Я удалил текстовое представление, которое я вручную разместил. Вот последующее activity_main.xml файл:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 
</RelativeLayout> 

Неясно мне, насколько эти данные конфигурации не требуется. Хотя я удалил столько, сколько мог найти съемный.

Далее я, по большей части, просто взял строку кода для линии из этого другого вопроса SO. Это то, что у меня есть для метода onCreate.

protected void onCreate(Bundle savedInstanceState) { 
     Log.i("[DEBUG]", "main activity - started"); 
     super.onCreate(savedInstanceState); 
     m_GLView = new MyGLSurfaceView(this); 
     rl = new RelativeLayout(this); 
     rl.addView(m_GLView); 
     tv = new TextView(this); 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     lp.addRule(RelativeLayout.CENTER_HORIZONTAL); 
     lp.addRule(RelativeLayout.CENTER_VERTICAL); 
     tv.setLayoutParams(lp); 

     tv.setBackgroundColor(0xFFFFFFFF); 
     rl.addView(tv); 

     s_textView = tv; 

     setContentView(rl); 
     Log.i("[DEBUG]", "main activity - finished"); 
    } 

На данный момент я отметит это как решение. Если кто-то приходит и дает ответ о том, как правильно получить ссылку - для добавленного вручную TextView, когда приложение использует GLSurfaceView, тогда я буду отмечать его как ответ, если он работает.

0

попробовать этот

protected void onCreate(Bundle savedInstanceState) { 
    Log.i("[DEBUG]", "main activity - started"); 
    super.onCreate(savedInstanceState); 
    m_GLView = new MyGLSurfaceView(this); 
    setContentView(m_GLView); 
    RelativeLayout layout = (RelativeLayout)LayoutInflater.from(this).inflate(R.layout.activity_main,null); 
    s_textView = (TextView) layout.findViewById(R.id.textView); 
    Log.i("[DEBUG]", "main activity - finished"); 
} 
+0

Это не помогло –

+0

Ну, вы пытаетесь извлечь TextView из m_GLView contentView, объявленный в R.layout.activity_main contentView – Ownage

+0

это немного измененный .. дать ему попробовать :) – Ownage

Смежные вопросы