質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.11%

Androidでfinish()で、MainActivityに移動したところ、spinner()がなくなり、コメントの送信ボタンも押せなくなりました。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 944

edoooooo

score 162

Androidで、finish()でMainActivityに戻ったところ、spinnerが表示されなくなり、コメントの送信ボタンも押せなくなります。
また、Switchを押すと、Could not find a method onSwitchClicked(View)と表示されます。

どうすれば、本来の指定したlayoutに戻れるでしょうか?
finish()を
Intent intent = new Intent(SecondActivity, MainActivity.class);
startActivity(intent);
にかえると、layoutは、崩れたものとはならないのですが、
現在発生しているエラーのToastが永遠に繰り返して表示されます。

public class LocationActivity extends FragmentActivity implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener,OnMapReadyCallback,GoogleMap.OnMapLongClickListener {
    //onMapReadyをコールバックすれば自動でonMapLeadyが呼ばれる


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    protected void onStart() {
        super.onStart();


        // LocationRequest を生成して精度、インターバルを設定
        locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(1000);
        locationRequest.setFastestInterval(16);

        fusedLocationProviderApi = LocationServices.FusedLocationApi;


        startFusedLocation();

        spinner = (Spinner) findViewById(R.id.spinner);

        // ArrayAdapter
        ArrayAdapter<String> adapter
                = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerItems);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // spinner に adapter をセット
        spinner.setAdapter(adapter);
        // リスナーを登録
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            // アイテムが選択された時
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (item.equals("GPSの現在地")) {

                }


            }
        }
    }


    //送信ボタン
    Button buttonTransmission = (Button) findViewById(R.id.buttonTransmission);
        buttonTransmission.setOnClickListener(new View.OnClickListener()

    {
        @Override
        public void onClick (View v){

        startFusedLocation();

    }
    });


    //swtch
    public void onSwitchClicked(View view) {
        Switch swtOnOff = (Switch) view;
        if (swtOnOff.isChecked()) { // ON状態になったとき
            startFusedLocation();
        } else if (!(swtOnOff.isChecked())) {
            stopFusedLocation();
        }
    }



    //startFusedLocation()
    private void startFusedLocation() {


        if (!mResolvingError) {

            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(LocationServices.API)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this) //failedListenerがある
                    .build();


            mGoogleApiClient.connect();

        }

    }

    private void stopFusedLocation() {
        mGoogleApiClient.disconnect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        stopFusedLocation();
    }


    @Override
    public void onConnected(Bundle bundle) {
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            return;
        }

        fusedLocationProviderApi = LocationServices.FusedLocationApi;
        Location currentLocation = fusedLocationProviderApi.getLastLocation(mGoogleApiClient);
        if (currentLocation != null && currentLocation.getTime() > 20000) {

            location = currentLocation;

            latitude = location.getLatitude();
            longitude = location.getLongitude();
            select(latitude, longitude);

        } else {
            try {

                fusedLocationProviderApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
                Executors.newScheduledThreadPool(1).schedule(new Runnable() {
                    @Override
                    public void run() {
                        fusedLocationProviderApi.removeLocationUpdates(mGoogleApiClient, com.example.android.sample.near.LocationActivity.this);
                    }
                }, 60000, TimeUnit.MILLISECONDS);

            } catch (Exception e) {
                System.out.println(e);
                Toast toast = Toast.makeText(this, "例外が発生、位置情報のPermissionを許可していますか?", Toast.LENGTH_SHORT);
                toast.show();

                //MainActivityに戻す
                finish();
            }
        }
    }



    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        if (mResolvingError) {
            return;
        } else if (connectionResult.hasResolution()) {
            try {
                mResolvingError = true;
                connectionResult.startResolutionForResult(this, REQUEST_RESOLVE_ERROR);
            } catch (IntentSender.SendIntentException e) {
                mGoogleApiClient.connect();
            }
        } else {
            mResolvingError = true;
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#acf"
    tools:context=".MainActivity">

    <LinearLayout
        android:gravity="center"
        android:background="#8af"
        android:orientation="horizontal"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        -->
        <Switch
            android:id="@+id/swtOnOff"
            android:text="GPS:"
            android:textSize="18dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:onClick="onSwitchClicked" />

        <Spinner
            android:id="@+id/spinner"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:background="#fff" />



        <!--switchを一番ひだりにして、その右に地域選択するためのボタンや、お気に入りの星ボタンを作る
        あとで
        -->


    </LinearLayout>

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_margin="20dp">


        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000" />
    </ScrollView>

    <LinearLayout
        android:gravity="center"
        android:background="#8af"
        android:orientation="horizontal"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">
        <EditText
            android:id="@+id/Transmission"
            android:layout_width="275dp"
            android:layout_height="40dp"
            android:hint="コメントを入力してください"
            />

        <Button
            android:id="@+id/buttonTransmission"
            android:layout_width="60dp"
            android:layout_height="40dp"
            android:layout_toRightOf="@+id/Transmission"
            android:text="送信"
            />
    </LinearLayout>

</LinearLayout>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yona

    2017/05/02 01:30

    自分の質問を読み返してください。なにも知らない回答者がわかると思いますか。

    キャンセル

  • edoooooo

    2017/05/02 01:48 編集

    重要だと思われるコードを載せました。

    キャンセル

回答 1

check解決した方法

0

Logで出力して気づいたのですが、
強制終了されてしまうため、finish()を呼ばないようにして、代わりにMainActivityへのStartActivityを呼びました。そうしたところ、エンドレスに何周も、エラーを繰り返しましたが、2回に1回は、正常に作動することがわかりました。

このような流れでした。
開始
connect 成功
select 成功
forが終わる。

またonCreate
/////////ここから
そして、fusedLocationが呼ばれ、
googleconnetを呼ぶ
mGoogleApiClient.conect()を呼び出される
そして、またfusedLocationが呼ばれる
そして、また、mGoogleApiClient.connectedが呼ばれる

そして、onConnectedがよばれる。
disconnectedでnot connectedとなり
そして、if(currentLocation!=null で、elseとなる。
catchでGoogleApiCliCient is not connected となる
finish()の代わりに、startActivityする

しかしまだ、2つ目のconnectedが残っており
unconnected nowとなり、
if(currentLocation!=null&& これで中に入れる
//////////ここの間に同じ動作が2回ずつ行われる

そして、selectして、それが終わると、

またonCreate()してfusedLocationが呼るという繰り返し、

この中で、///で囲んだところが2回同じ作業が繰り返されているため、
@onStart()のstartFusedLocation()を無くしました。そうしたところ、戻るボタンを押しても、layoutは、崩れず、xmlに書いたコード通りの画面を作ることができました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • Javaに関する質問
  • Androidでfinish()で、MainActivityに移動したところ、spinner()がなくなり、コメントの送信ボタンも押せなくなりました。