2017-10-28 12 views
0

뒤로 버튼을 누른 후 앱을 닫으려면 아래 코드를 사용했습니다. 얼마 전에 작동했지만 다시 사용하려고 시도했습니다.Android 스튜디오,이 onBackPressed() 코드의 문제점은 무엇입니까?

오류 : (88, 13) 오류 : 클래스, 인터페이스 또는 열거 형이 예상됩니다.

이 코드 앱을 삭제하면 빌드 할 수 있는데 문제가있는 부분이 보이지 않습니까? 여기

onBackPressed 구현되는 MainActivity이다

package com.example.chab.test; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.os.Handler; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.Toast; 
import com.squareup.picasso.Picasso; 

public class MainActivity extends AppCompatActivity { 


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

    ImageView image = (ImageView) findViewById(R.id.a); 
    ImageView image1 = (ImageView) findViewById(R.id.b); 
    ImageView image2 = (ImageView) findViewById(R.id.c); 
    ImageView image3 = (ImageView) findViewById(R.id.d); 
    ImageView image4 = (ImageView) findViewById(R.id.e); 
    ImageView image5 = (ImageView) findViewById(R.id.f); 
    ImageView image6 = (ImageView) findViewById(R.id.g); 

    Picasso.with(this).load("http:/1.jpeg").into(image); 
    Picasso.with(this).load("http://1.jpeg").into(image1); 
    Picasso.with(this).load("http://1.jpeg").into(image2); 
    Picasso.with(this).load("http://1.jpeg").into(image3); 
    Picasso.with(this).load("http://1.jpeg").into(image4); 
    Picasso.with(this).load("http://1.jpeg").into(image5); 
    Picasso.with(this).load("http://1.jpeg").into(image6); 

    Button btnOne = (Button) findViewById(R.id.Btn); 
    btnOne.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Intent intent = new Intent(getApplicationContext(), Activitydwa.class); 
      startActivity(intent); 
     } 
    }); 


} 
} //THIS BRACKET MUST BE MOVED TO THE END OF CODE! 

private Boolean exit = false; 
@Override 
private void super.onBackPressed() { 
    if (exit) { 
     this.finish(); // finish activity 
    } else { 
     Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show(); 
     exit = true; 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       exit = false; 
      } 
     }, 3 * 1000); 
    } 
} 

EDIT : 를 해결했다. Boollean 앞에있는 대괄호는 코드 끝까지 이동해야합니다. 그럼 모든 작품. 고맙습니다.

+1

다른'onBackPressed' 될 필요가'public' 코드는 괜찮아 보인다. 정확히 어디에 위치합니까? – laalto

+0

어떤 부분에서든 문제가있을 수 있습니다. pls는 다음을 검사하고 부울은 객체 래퍼이며 부울은 원시 데이터 유형입니다. 재정의 된 methoad는 보호되거나 공개되어야합니다. –

+0

코드는 mainactivity에 있으며 onCreate() 바로 뒤에 있습니다. 이후에는 다른 것이 없습니다. 위의 코드를 제거하면 문제가되지 않습니다. – Chab

답변

0

첫 번째 문제는 클래스 외부에서 구현 된 메서드를 사용한다는 것입니다. Java에서 메소드는 class, interface 또는 enum에 속해야합니다. 괄호를 두 번 확인하고 클래스 괄호 안쪽으로 메서드를 이동하십시오. 두 번째 문제는 onBackPressed 메서드에 대해 잘못된 서명이 있다는 것입니다.


이것은 당신이 무엇을 : 아래의 코드를 참조하는

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    // ... 
    } 
} 

private Boolean exit = false; 

@Override 
private void super.onBackPressed() { 
    // ... 
} 

이 필요한 것입니다 :

이보다
public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    // ... 
    } 

    private Boolean exit = false; 

    @Override 
    public void onBackPressed() { 
    // ... 
    } 
} 
+0

이미 MainActivity 클래스 안에 넣으려고했는데 작동하지 않았습니다. 나는 다시 노력했고 일했다! 여러분 감사합니다. – Chab

+0

코드를 자세히 살펴보십시오. 메소드 서명이 원래 코드 블럭 – Jon

+0

과 다른 경우에도 문제가 해결되면 나중에 답변 할 수 있도록 허용 된 답변으로 표시하십시오. – Jon

1

this.finish() 또는

이전 화면으로 돌아 가야 super.onBackPressed(); 또는

전화 NavUtils.navigateUpFromSameTask(this);을 시도하십시오 마무리() 이전

super.onBackPressed() 

을 넣어/활동