Java 有意图的活动变更不';不工作,不做事';我不知道为什么
我正在通过YouTube教程学习Android,我在不同的活动之间切换,一步一步地跟踪,结果就是不起作用 我尝试了我发现的唯一方法,有了意图,一些代码可能会有所不同,但最终使用了意图 这就是我所拥有的。activity_main.xml上的按钮:Java 有意图的活动变更不';不工作,不做事';我不知道为什么,java,android,android-activity,Java,Android,Android Activity,我正在通过YouTube教程学习Android,我在不同的活动之间切换,一步一步地跟踪,结果就是不起作用 我尝试了我发现的唯一方法,有了意图,一些代码可能会有所不同,但最终使用了意图 这就是我所拥有的。activity_main.xml上的按钮: <Button android:id="@+id/btnNext" android:layout_width="match_parent"
<Button
android:id="@+id/btnNext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/lvFood"
android:text="@string/btnNext" />
按钮的侦听器:
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent toSecond = new Intent(MainActivity.this, SecondActivity.class);
startActivity(toSecond);
}
});
我也试过这个,但结果是一样的
Intent toSecond = new Intent (v.getContext(), SecondActivity.class);
startActivityForResult(toSecond, 0);
我的清单文件:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/hello"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SecondActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
编辑
MainActivity上的代码:
package com.example.helloworld;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btnSayHello, btnSayAnything, btnNext;
TextView tvHelloWorld;
EditText etSayAnything;
Spinner spOptions;
ListView lvFood;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSayHello = findViewById(R.id.btnSayHello);
tvHelloWorld = findViewById(R.id.tvHelloWorld);
btnSayAnything = findViewById(R.id.btnSayAnything);
etSayAnything = findViewById(R.id.etSayAnything);
spOptions = findViewById(R.id.spOptions);
lvFood = findViewById(R.id.lvFood);
ArrayAdapter<CharSequence> spOptionsAdapter = ArrayAdapter.createFromResource(this, R.array.spOptions, android.R.layout.simple_spinner_item);
spOptions.setAdapter(spOptionsAdapter);
ArrayAdapter<CharSequence> lvFoodAdapter = ArrayAdapter.createFromResource(this, R.array.lvFood, android.R.layout.simple_list_item_1);
lvFood.setAdapter(lvFoodAdapter);
btnNext = findViewById(R.id.btnNext);
btnSayHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(tvHelloWorld.getVisibility() == View.INVISIBLE)
{
tvHelloWorld.setVisibility(View.VISIBLE);
}else
{
tvHelloWorld.setVisibility(View.INVISIBLE);
}
}
});
btnSayAnything.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvHelloWorld.setText(etSayAnything.getText());
etSayAnything.setText("");
}
});
lvFood.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
tvHelloWorld.setText(lvFood.getItemAtPosition(position).toString());
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent toSecond = new Intent(MainActivity.this, SecondActivity.class);
startActivity(toSecond);
}
});
}
}
下面是我观看的视频:
但是,应用程序只是停止并关闭。这可能是因为您试图在创建按钮布局之前找到按钮。您确定要在
onCreate
(或其中)之后使用findViewbyId
请张贴您的全部主要活动代码(以及第二个)
编辑:我刚刚看到在您的第二个活动中引发了异常,因此可能不是我上面所说的您尝试单击的按钮没有找到;确保在
第二个活动的oncreate()
中执行此操作
setContentView(R.layout.your_second_activity_layout);
还要确保在第二个活动中像在第一个活动中一样实例化两个按钮:
btnNext = findViewById(R.id.btnNext);
编辑
在我看到您的第二个活动后,您忘记了:
btnback = findViewById(R.id.btnBack);
btnExit = findViewById(R.id.btnExit);
创建Android活动时,还必须定义一个布局,该布局将成为该活动的用户界面。您可以通过setContentView
方法将布局绑定到活动,该方法在活动的onCreate
方法上尽快调用(您必须重写此方法)。只有将布局绑定到活动之后,才能开始将布局上的特定项(在本例中为按钮)绑定到代码中声明的相应对象。如果在将布局绑定到活动之前尝试绑定这些项,则会得到一个空指针,而不是实际的项。有关活动及其生命周期的更多信息,请阅读
编辑:
你没有初始化你的按钮。请确保在第二个活动中有类似的内容:
public class SecondActivity extends Activity {
private Button btnBack;
private Button btnExit;;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btnBack = findViewById(R.id.btnBack);
btnExit = findViewById(R.id.btnExit);
// set the button listeners
}
}
尽量在日志报告中查找诸如“错误”、“异常”、“原因”之类的词,因为在这一行中,您可以找到崩溃的主要原因
就像你在3号记录行写的那样
Unable to start activity ...com.example.helloworld.SecondActivity
因为
Attempt to invoke method Button.setOnClickListener on a null object reference
这可能意味着您的按钮btnNext
为空。为什么?我们无法看到整个代码,但我认为这是因为您没有在onCreate()
方法中使用setContentView()
设置布局视图。我已经解决了它,我忘记了findViewById
在我的SecondActivity
中,您可能的副本从未包含SecondActivity
的代码,所以我们无法回答您的问题;)您的第二个活动中有错误。这就是它无法打开的原因。您必须添加主活动的完整代码,然后才能找到解决方案。我想你的btnNext是空的。所以需要完整的代码MainActivity。在膨胀视图之前,您可能试图通过按钮的id找到该按钮。你能告诉我们你调用findviewbyd来获取按钮的确切位置吗?问题表明有btnNext=findviewbyd(R.id.btnNext)代码>在MainActivity
中,我们可以从崩溃日志中看到,有一个按钮被按下以转到第二个活动,因此setContentView()
必须也在那里,否则MainActivity
中将不会有按钮按下。崩溃日志还指出崩溃发生在SecondActivity
中。虽然人们的猜测可能是对的,但到目前为止,我们还不能真正说出哪里出了问题。但他们仍然只是猜测。啊,你是对的。问题在于第二个活动中的click listener设置。将相应地编辑我的答案。请检查我的答案,您在第二个活动中发现了frogot ViewById:
setContentView(R.layout.your_second_activity_layout);
Unable to start activity ...com.example.helloworld.SecondActivity
Attempt to invoke method Button.setOnClickListener on a null object reference