Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android “返回”按钮至“主要活动引发”;不幸的是,应用程序已停止;_Android_Button_Android Intent_Android Activity_Onclick - Fatal编程技术网

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代码