Android “返回”按钮至“主要活动引发”;不幸的是,应用程序已停止;
首先,如果问题太长,请原谅:) 我编写了一个(非常)简单的程序,名为Android “返回”按钮至“主要活动引发”;不幸的是,应用程序已停止;,android,button,android-intent,android-activity,onclick,Android,Button,Android Intent,Android Activity,Onclick,首先,如果问题太长,请原谅:) 我编写了一个(非常)简单的程序,名为TwoActivity,但出现了一个错误 节目 该程序的目的是询问用户的姓名,并在另一个活动中打印Hello,。该计划包括两个活动:第一个和第二个First本身包括一个获取用户名称的EditText,以及一个允许用户提交名称的按钮第二个由打印hello表达式的文本视图和返回到第一个的按钮组成 代码如下: onClick第一个中按钮的方法: public void onClickGoToSecond(View view) {
TwoActivity
,但出现了一个错误
节目
该程序的目的是询问用户的姓名,并在另一个活动中打印Hello,
。该计划包括两个活动:第一个
和第二个
First
本身包括一个获取用户名称的EditText
,以及一个允许用户提交名称的按钮<代码>第二个由打印hello表达式的文本视图
和返回到第一个
的按钮组成
代码如下:
onClick
第一个中按钮的方法:
public void onClickGoToSecond(View view)
{
Intent i=new Intent(this,Second.class);
EditText e=(EditText) findViewById(R.id.editText);
i.putExtra(Second.M,e.getText().toString());
startActivity(i);
}
M
在Second
中:
public static final String M="message";
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i=getIntent();
TextView t=(TextView) findViewById(R.id.textView);
t.setText("Hello "+i.getStringExtra(M));
}
public void onClickGoBack(View view)
{
Intent i=new Intent(this,First.class);
startActivity(i);
}
public void onClickNext(View view)
{
Intent i=new Intent(this,Third.class);
startActivity(i);
}
onCreate()
的Second
:
public static final String M="message";
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i=getIntent();
TextView t=(TextView) findViewById(R.id.textView);
t.setText("Hello "+i.getStringExtra(M));
}
public void onClickGoBack(View view)
{
Intent i=new Intent(this,First.class);
startActivity(i);
}
public void onClickNext(View view)
{
Intent i=new Intent(this,Third.class);
startActivity(i);
}
onClick
第二个中按钮的方法:
public static final String M="message";
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i=getIntent();
TextView t=(TextView) findViewById(R.id.textView);
t.setText("Hello "+i.getStringExtra(M));
}
public void onClickGoBack(View view)
{
Intent i=new Intent(this,First.class);
startActivity(i);
}
public void onClickNext(View view)
{
Intent i=new Intent(this,Third.class);
startActivity(i);
}
我认为代码的其他部分不需要提及
问题
问题是,当我进入秒
并触摸按钮时,程序被强制关闭并给出错误信息
Unfortunately, TwoActivity has stopped.
我的方法
在这一点上,在谷歌搜索了一番之后,什么也没找到,我做了一些愚蠢的猜测:
- 哑猜#1:因为
第一个
是程序的主要活动
,
我不能对它下定决心
- 愚蠢的猜测#2:因为之前已经创建了
第一个
,所以我无法
再次尝试的意图
所以,我改变了程序,看看我愚蠢的猜测是否真的愚蠢。我敢肯定,他们是
程序被修改了
我在程序中添加了另一个名为Third
的活动。我还在第一个
中添加了另一个按钮,以便用户可以将其姓名发送到第二个
或第三个
。我还向第二个
添加了另一个按钮,该按钮旨在创建第三个
,如下所示:单击第二个按钮中的第二个按钮:
public static final String M="message";
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i=getIntent();
TextView t=(TextView) findViewById(R.id.textView);
t.setText("Hello "+i.getStringExtra(M));
}
public void onClickGoBack(View view)
{
Intent i=new Intent(this,First.class);
startActivity(i);
}
public void onClickNext(View view)
{
Intent i=new Intent(this,Third.class);
startActivity(i);
}
Third
完全像Second
。它有两个按钮。第一个按钮对第一个First
(因此它是后退按钮),第二个按钮对第二个second
作出意图并创建它
更奇怪的行为
在这一点上,我得到了一个非常奇怪的行为。当我触摸第三个中的后退按钮时,程序工作正常。但是当我在秒
中触摸相同的后退按钮时,程序会给出前面提到的错误。此外,当我触摸Third
中的按钮以转到Second
时,程序也能正常工作,但在Second
中,它会引发错误。总的来说,在您输入Second
之前,程序工作正常。在秒中触摸两个按钮会出错。我根本不明白问题出在哪里
注释:请注意,如果我按下手机本身的后退按钮,或者如果我将设为第二个的父项,并使用操作栏中的后退按钮,程序将正常工作
更新
这是出现错误时返工程序的堆栈跟踪(当我单击按钮(id为按钮2到3new
)从第二个
转到第三个
时,会出现此错误。当我单击按钮返回到第一个
时,会出现相同的错误):
第二行表示,在我的activity类中,我没有将用户从第二个
带到第三个
的按钮作为
onClick
方法,但我有:
public void onClickBack(View view)
{
Intent i=new Intent(this,First.class);
startActivity(i);
}
public void onClickNext(View view)
{
Intent i=new Intent(this,Third.class);
startActivity(i);
}
这是活动\u second
布局文件的一部分:
<Button
...
android:id="@+id/button2to3new"
android:onClick="onClickNext"
...
/>
以下是导航到下一个活动的正确/更好的方法,您需要尝试一下
您可以为按钮/视图使用onclicklisteners,而不是在XML中指定函数,该按钮/视图将导航到下一个活动。看看下面
FirstActivity
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i=getIntent();
TextView t=(TextView) findViewById(R.id.textView);
t.setText("Hello "+i.getStringExtra(""user_data_1));
}
XML:
从XML中删除onclick
<Button
...
android:id="@+id/button1to2new"
...
/>
然后在第二个活动中
第二活动
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent i=getIntent();
TextView t=(TextView) findViewById(R.id.textView);
t.setText("Hello "+i.getStringExtra(""user_data_1));
}
上述代码可以很好地在活动之间传递数据
如果要返回或关闭当前活动,只需按back键并使用finish()在任何单击侦听器中的“代码>”
其他链接:
致以最良好的祝愿 此答案基于复制到的完整代码
请注意,错误消息是
在视图类android.support.v7.widget.AppButton上的活动类android.support.v7.internal.View.ContextThemeWrapper中找不到onClick处理程序的方法onClickNext(视图)
因此AppCompatButton缺少一个方法,但是Second
扩展了ActionBarActivity
。为什么按钮被视为AppCompatButton?为什么只在第二个
中使用按钮
比较布局文件,第二个活动的布局包含行
android:theme=“@style/AppTheme”
就是这样:我们仁慈的IDE(Android Studio?)生成了AppTheme作为
因此,布局文件中的按钮
元素被视为属于AppCompat宇宙,在幕后,当运行时请求OnClickListener
方法时,可怜的旧的不推荐的ActionBarActivity未能正确响应…BOOM
解决方案:删除android:theme
“不幸的是,应用程序已停止”--使用LogCat检查与崩溃相关的Java堆栈跟踪:我的猜测是:布局文件中的方法名与Java代码不匹配。如果您想保留您的问题,请添加“Second”的布局和“Second”的整个java代码