2015-07-06 3 views
-2

Итак, когда я пытаюсь запустить это приложение, он сработает. Однако он только сбой, когда я пытаюсь использовать setOnClickListener. Если я прокомментирую эту небольшую секцию, она работает нормально.setOnClickListener для кнопки приводит к сбою приложения

public class MainActivity extends ActionBarActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_main); 
    final TextView textView = (TextView) findViewById(R.id.textView); 
    final Button button = (Button)findViewById(R.id.button); 
    super.onCreate(savedInstanceState); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      //textView.setText("Boop!"); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 

OK Рабочий код! Мне пришлось переместить super.onСоздать и объявить текст в разделе findviewbyID. Однако теперь он работает так, как я предполагал. Спасибо, ребята, за помощь! Я просто хотел сделать что-то очень важное для даты. xD вы, ребята, спасатели жизни.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button button = (Button)findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      TextView textView = (TextView) findViewById(R.id.textView); 
      textView.setText("Boop!"); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

РАБОТА

+0

где ваш логарифм ??? отправьте его –

+0

Вы должны проверить (в коде также), если textView действительно имеет какое-либо значение. Я подозреваю, что он не нашел. –

+0

Пожалуйста, разместите свой logCat. –

ответ

0

Вы объявили textView в final:

переменная может быть объявлена ​​окончательным. Конечная переменная может быть назначена только один раз.

final TextView textView = (TextView) findViewById(R.id.textView); 

так что вы не можете изменить его.

Вы должны получить вид внутри метода OnClick:

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     TextView textView = (TextView) findViewById(R.id.textView); 
     textView.setText("Boop!"); 
    } 
}); 
+0

Хорошо, я переместил переменную в прослушиватель, как вы показали. Однако он по-прежнему падает. – icefire555

1

ошибка приходит потому, что вы вызываете super.onCreate(savedInstanceState); после setContentView, а затем с помощью переменных.

Причина, по которой ошибка не наступает, пока вы не напишите onClicklister: Переменные textView и кнопка уже имеют нулевое или несогласованное состояние, но когда вы пишете прослушиватель кликов, переменные используются, и вы сталкиваетесь ошибка.

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