Второе действие не начнется - PullRequest
0 голосов
/ 18 октября 2018

Я участвую в конкурсе «Основы Android 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: Невозможно запустить службуU = 0: не найдено

С тех пор я пытался воспроизвести эту ошибку несколько раз, но не смог.Единственные записи, которые я вижу в своих попытках, относятся к следующему:

2018-10-18 07: 00: 44.979 1369-1401 /?W / audio_hw_generic: недостаточно данных для HAL, ожидаемая позиция 754681, записано только 603360

Но я не уверен, что это действительно связано с проблемой запуска второго действия.

Редактировать:

В ответ на некоторые комментарии вот мой манифест.

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

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Для того, что я вижу, я предполагаю, что вы просто запускаете SecondActivity в атрибуте onClick в макете activity_main и, как только в SecondActivity, как только происходит onCreate, вы просто звоните finish () здесь:

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

Итак, как только действие создано, оно закончено ...

Может быть, выпопытаться сделать, это вернуть текст, нажатый кнопкой, в 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();

Я не пробовал код, но надеюсь, что это поможет вам!

0 голосов
/ 18 октября 2018

Если ваш onActivityResult достигнут, это означает, что SecondActivity запущена.Вы должны просто проверить, что делать внутри второго занятия, прежде чем завершить его.Например, с помощью приведенного выше кода вы вызываете завершение действия при его создании.

Ваш код работает, вам нужно просто найти правильное место для размещения этого кода:

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

В соответствии с вашей логикой.

Думаю, это поможет.

0 голосов
/ 18 октября 2018

Если второй 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(); после.

...