第二个 activity 不会启动
Second activity won't launch
我正在参加 Android 基础知识 2.2 编码挑战,但我无法使用前面课程中描述的逻辑启动第二个 activity。
这是我第一个 activity 的代码:
package com.homing.a22codingchallenge;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
public static final String EXTRA_MESSAGE = "com.homing.mainactivity.extra.message";
public static final int TEXT_REQUEST = 1;
private TextView TV1, TV2, TV3, TV4, TV5, TV6, TV7, TV8, TV9, TV10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TV1 = findViewById(R.id.TV1);
TV2 = findViewById(R.id.TV2);
TV3 = findViewById(R.id.TV3);
TV4 = findViewById(R.id.TV4);
TV5 = findViewById(R.id.TV5);
TV6 = findViewById(R.id.TV6);
TV7 = findViewById(R.id.TV7);
TV8 = findViewById(R.id.TV8);
TV9 = findViewById(R.id.TV9);
TV10 = findViewById(R.id.TV10);
}
public void addItems(View view) {
Log.d(LOG_TAG, "Button clicked");
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra(EXTRA_MESSAGE, "What?");
startActivityForResult(intent, TEXT_REQUEST);
Log.d(LOG_TAG, "startActivityForResult()");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TEXT_REQUEST) {
if (resultCode == RESULT_OK) {
String reply = data.getStringExtra(SecondActivity.EXTRA_RETURN);
fillList(reply);
}
}
}
public void fillList(String string) {
String[] list = { TV1.toString(), TV2.toString(), TV3.toString(), TV4.toString(), TV5.toString(), TV6.toString(), TV7.toString(), TV8.toString(), TV9.toString(), TV10.toString() };
for (int i = 0; i < list.length; i++) {
list[i] = string;
}
}
}
这是我的第二个代码 activity:
package com.homing.a22codingchallenge;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
public class SecondActivity extends AppCompatActivity {
private Button BTN1, BTN2, BTN3, BTN4, BTN5, BTN6, BTN7, BTN8, BTN9, BTN10;
public static final String EXTRA_RETURN = "com.homing.22codingchallenge.secondactivity.extra.return";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
BTN1 = findViewById(R.id.BTN1);
BTN2 = findViewById(R.id.BTN2);
BTN3 = findViewById(R.id.BTN3);
BTN4 = findViewById(R.id.BTN4);
BTN5 = findViewById(R.id.BTN5);
BTN6 = findViewById(R.id.BTN6);
BTN7 = findViewById(R.id.BTN7);
BTN8 = findViewById(R.id.BTN8);
BTN9 = findViewById(R.id.BTN9);
BTN10 = findViewById(R.id.BTN10);
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
}
}
我尝试将代码与我在指南中完成的项目进行比较,据我所知一切都是一致的。与我的问题类似的帖子提出了一些没有意义的建议,因为我的第一个项目运行良好。
我放弃了调试日志并在 Logcat 中确认该按钮正在注册点击,它甚至 运行 通过 startActivityForResult() 方法通过块。
有一个 Logcat 条目看起来相关,但搜索并没有真正产生对我有帮助的任何东西:
2018-10-18 07:01:37.386 1624-1677/system_process W/ActivityManager: Unable to start service Intent { act=com.google.android.gms.drive.ApiService.RESET_AFTER_BOOT flg=0x4 cmp=com.google.android.gms/.drive.api.ApiService (has extras) } U=0: not found
此后我多次尝试重现此错误,但未能成功。我在尝试中看到的唯一条目如下:
2018-10-18 07:00:44.979 1369-1401/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 754681 , only wrote 603360
但我不确定这是否真的与启动第二个 activity 的问题有关。
编辑:
为了回应一些评论,这里是我的清单。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="22CodingChallenge"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/SecondActivity_name"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.homing.a22codingchallenge.MainActivity" />
</activity>
</application>
如果第二个Activity
没有添加到AndroidManifest.xml
,IDE会报错没有添加。
但是,如果您在日志中得到:Button clicked
,那么 main Activity
没有问题,但是,请检查第二个 Activity
:
中的代码
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
它一执行 putExtra()
,它实际上就完成了 Activity
:finish();
之后。
就我所见,我想您只是在 activity_main 布局中的 onClick 属性中启动 SecondActivity ,并且,一旦在 SecondActivity 中,一旦 onCreate 发生,您只需在此处调用 finish():
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
所以activity一创建就结束了...
也许您想要做的是 return 在 SecondActivity 中单击按钮的文本?
类似于:
BTN1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
}
});
也许您应该为每个按钮添加一个 onClick 属性,并添加一个对方法的调用,该方法将获取单击的按钮的文本,例如:
public void clickButton(View view) {
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, ((Button) view).getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
我还没有尝试过代码,但我希望这对你有帮助!
如果达到您的 onActivityResult
,则表示 SecondActivity 已启动。在完成之前,您只需检查第二个 activity 中要做什么。例如,对于上面的代码,您在 activity 创建时调用完成。
您的代码有效,您只需找到放置此代码的正确位置:
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
按照你的逻辑。
我认为这会有所帮助。
我正在参加 Android 基础知识 2.2 编码挑战,但我无法使用前面课程中描述的逻辑启动第二个 activity。
这是我第一个 activity 的代码:
package com.homing.a22codingchallenge;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
public static final String EXTRA_MESSAGE = "com.homing.mainactivity.extra.message";
public static final int TEXT_REQUEST = 1;
private TextView TV1, TV2, TV3, TV4, TV5, TV6, TV7, TV8, TV9, TV10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TV1 = findViewById(R.id.TV1);
TV2 = findViewById(R.id.TV2);
TV3 = findViewById(R.id.TV3);
TV4 = findViewById(R.id.TV4);
TV5 = findViewById(R.id.TV5);
TV6 = findViewById(R.id.TV6);
TV7 = findViewById(R.id.TV7);
TV8 = findViewById(R.id.TV8);
TV9 = findViewById(R.id.TV9);
TV10 = findViewById(R.id.TV10);
}
public void addItems(View view) {
Log.d(LOG_TAG, "Button clicked");
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra(EXTRA_MESSAGE, "What?");
startActivityForResult(intent, TEXT_REQUEST);
Log.d(LOG_TAG, "startActivityForResult()");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TEXT_REQUEST) {
if (resultCode == RESULT_OK) {
String reply = data.getStringExtra(SecondActivity.EXTRA_RETURN);
fillList(reply);
}
}
}
public void fillList(String string) {
String[] list = { TV1.toString(), TV2.toString(), TV3.toString(), TV4.toString(), TV5.toString(), TV6.toString(), TV7.toString(), TV8.toString(), TV9.toString(), TV10.toString() };
for (int i = 0; i < list.length; i++) {
list[i] = string;
}
}
}
这是我的第二个代码 activity:
package com.homing.a22codingchallenge;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
public class SecondActivity extends AppCompatActivity {
private Button BTN1, BTN2, BTN3, BTN4, BTN5, BTN6, BTN7, BTN8, BTN9, BTN10;
public static final String EXTRA_RETURN = "com.homing.22codingchallenge.secondactivity.extra.return";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
BTN1 = findViewById(R.id.BTN1);
BTN2 = findViewById(R.id.BTN2);
BTN3 = findViewById(R.id.BTN3);
BTN4 = findViewById(R.id.BTN4);
BTN5 = findViewById(R.id.BTN5);
BTN6 = findViewById(R.id.BTN6);
BTN7 = findViewById(R.id.BTN7);
BTN8 = findViewById(R.id.BTN8);
BTN9 = findViewById(R.id.BTN9);
BTN10 = findViewById(R.id.BTN10);
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
}
}
我尝试将代码与我在指南中完成的项目进行比较,据我所知一切都是一致的。与我的问题类似的帖子提出了一些没有意义的建议,因为我的第一个项目运行良好。
我放弃了调试日志并在 Logcat 中确认该按钮正在注册点击,它甚至 运行 通过 startActivityForResult() 方法通过块。
有一个 Logcat 条目看起来相关,但搜索并没有真正产生对我有帮助的任何东西:
2018-10-18 07:01:37.386 1624-1677/system_process W/ActivityManager: Unable to start service Intent { act=com.google.android.gms.drive.ApiService.RESET_AFTER_BOOT flg=0x4 cmp=com.google.android.gms/.drive.api.ApiService (has extras) } U=0: not found
此后我多次尝试重现此错误,但未能成功。我在尝试中看到的唯一条目如下:
2018-10-18 07:00:44.979 1369-1401/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 754681 , only wrote 603360
但我不确定这是否真的与启动第二个 activity 的问题有关。
编辑:
为了回应一些评论,这里是我的清单。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="22CodingChallenge"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/SecondActivity_name"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.homing.a22codingchallenge.MainActivity" />
</activity>
</application>
如果第二个Activity
没有添加到AndroidManifest.xml
,IDE会报错没有添加。
但是,如果您在日志中得到:Button clicked
,那么 main Activity
没有问题,但是,请检查第二个 Activity
:
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
它一执行 putExtra()
,它实际上就完成了 Activity
:finish();
之后。
就我所见,我想您只是在 activity_main 布局中的 onClick 属性中启动 SecondActivity ,并且,一旦在 SecondActivity 中,一旦 onCreate 发生,您只需在此处调用 finish():
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
所以activity一创建就结束了...
也许您想要做的是 return 在 SecondActivity 中单击按钮的文本?
类似于:
BTN1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
}
});
也许您应该为每个按钮添加一个 onClick 属性,并添加一个对方法的调用,该方法将获取单击的按钮的文本,例如:
public void clickButton(View view) {
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, ((Button) view).getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
我还没有尝试过代码,但我希望这对你有帮助!
如果达到您的 onActivityResult
,则表示 SecondActivity 已启动。在完成之前,您只需检查第二个 activity 中要做什么。例如,对于上面的代码,您在 activity 创建时调用完成。
您的代码有效,您只需找到放置此代码的正确位置:
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
setResult(RESULT_OK, returnIntent);
finish();
按照你的逻辑。
我认为这会有所帮助。