4 回答

TA貢獻1784條經(jīng)驗 獲得超8個贊
您需要在調(diào)用 voiceBtn = findViewById(R.id.goToVoice) 之前調(diào)用 setContentView(); 由于您未指定布局,因此 findViewById 方法將不會獲取按鈕實例
public class RecogActivity extends AppCompatActivity {
private Button voiceBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout first
setContentView(R.layout.YOUR_LAYOUT_XML_FILE_NAME)
voiceBtn = findViewById(R.id.goToVoice);
// some unrelated code
configureActivitySwap();
}
public void configureActivitySwap(){
// Button voiceBtn = (findViewById(R.id.goToVoice));
voiceBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}

TA貢獻2051條經(jīng)驗 獲得超10個贊
您是否在嘗試使用 findViewById 查找視圖之前設(shè)置布局?setContentView(R.layout.main_layout);

TA貢獻1752條經(jīng)驗 獲得超4個贊
我猜試試)在你的// some unrelated codeis containssetContentView方法中?
public class RecogActivity extends AppCompatActivity {
private Button voiceBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
voiceBtn = findViewById(R.id.goToVoice);
setContentView(R.layout.some_layout)
// some unrelated code
configureActivitySwap();
}
public void configureActivitySwap(){
// Button voiceBtn = (findViewById(R.id.goToVoice));
voiceBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
你抓到 NPE 是因為findViewById調(diào)用了膨脹的視圖。在第一種情況下,你findViewById之前一直在打電話,但得到了例外。setContentView而在第二種情況下configureActivitySwap,那是追趕setContentView。setContentView之后移動super.onCreate(savedInstanceState),一切都會正常工作。

TA貢獻1804條經(jīng)驗 獲得超7個贊
voiceBtn = (Button) findViewById(R.id.goToVoice);
用上面的替換你的onCreate()
方法中的語句。它應(yīng)該工作。
并使用
super.finish() instead of finish()
添加回答
舉報