【问题标题】:Second activity won't launch第二个活动不会启动
【发布时间】:2018-10-18 12:28:17
【问题描述】:

我正在参加 Android Fundamentals 2.2 编码挑战,但我无法使用前面课程中描述的逻辑启动第二个活动。

这是我第一个活动的代码:

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;
        }
    }
}

这是我的第二个活动的代码:

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:无法启动服务 Intent { act=com.google.android.gms.drive.ApiService.RESET_AFTER_BOOT flg=0x4 cmp=com. google.android.gms/.drive.api.ApiService(有附加功能)} U=0:未找到

此后,我多次尝试重现此错误,但都未能重现。我在尝试中看到的唯一条目如下:

2018-10-18 07:00:44.979 1369-1401/? W/audio_hw_generic:没有向 HAL 提供足够的数据,预期位置 754681 ,只写了 603360

但我不确定这是否真的与启动第二个活动的问题有关。

编辑:

作为对某些 cmets 的回应,这里是我的清单。

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

【问题讨论】:

  • Manifest 文件中有第二个活动吗?
  • 方法 addItems 被无处调用。它不会从 MainActivity 打开 SecondActivity。
  • @J-Walk 更新你的整个 logcat
  • 不不,上面描述的消息与您的SecondActivity无关。就像@ZUNJAE 一样,检查第二个活动是否在清单文件中,如果没有插入。
  • @Chandankushwaha,即使在带有onclick 属性的 XML 中也可以引用 addItems,但前提是他指定了它

标签: java android android-studio-3.2


【解决方案1】:

如果达到您的onActivityResult,则表示 SecondActivity 已启动。在完成第二个活动之前,您只需检查一下要做什么。例如,使用上面的代码,您正在调用在创建活动时完成活动。

您的代码有效,您只需找到放置此代码的正确位置:

Intent returnIntent = new Intent();
        returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
        setResult(RESULT_OK, returnIntent);
        finish();

根据你的逻辑。

我认为这会有所帮助。

【讨论】:

    【解决方案2】:

    如果第二个Activity没有添加到AndroidManifest.xml中,IDE会报错没有添加。

    但是,如果你在日志中得到:Button clicked,那么主Activity 没有问题但是,请检查第二个Activity 中的代码:

    Intent returnIntent = new Intent();
            returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
            setResult(RESULT_OK, returnIntent);
            finish();
    

    一旦它执行putExtra(),它实际上完成了Activity:finish();之后。

    【讨论】:

      【解决方案3】:

      就我所见,我想您只是在 activity_main 布局中的 onClick 属性中启动 SecondActivity,并且一旦在 SecondActivity 中,只要onCreate 发生了,你只是在这里调用 finish()

      Intent returnIntent = new Intent();
      returnIntent.putExtra(EXTRA_RETURN, BTN1.getText().toString());
      setResult(RESULT_OK, returnIntent);
      finish();
      

      所以一旦创建了activity,它就完成了......

      也许您要做的是在 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();
      

      我没有试过代码,但我希望这对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多