문제

이것은 내 oncreate 함수입니다.

Hello 용 OnClickListener 내부에는 많은 코드가 있으므로 밖에서 옮길 원한다.어떻게해야합니까?

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        facebook.authorize(this, permissions, Facebook.FORCE_DIALOG_AUTH,
                new DialogListener() {

                    public void onComplete(Bundle values) {
                    }

                    public void onFacebookError(FacebookError error) {
                    }

                    public void onError(DialogError e) {
                    }

                    public void onCancel() {

                    }
                });

        hello = (Button) findViewById(R.id.hello);
        info = (TextView) findViewById(R.id.facebook_info);
        content = (TextView) findViewById(R.id.content);

        hello.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                // bundle.putString("fields", "email");
                try {
                    about = facebook.request("me");
                    json = Util.parseJson(about);
                    id = json.getString("id");
                    first_name = json.getString("first_name");
                    last_name = json.getString("last_name");
                    email = json.getString("email");

                    if (!json.isNull("username")) {
                        username = json.getString("username");
                    } else {
                        Log.d("TAG", "Username not set");
                    }

                    dob = json.getString("birthday");
                    gender = json.getString("gender");
                    location = json.getString("location");

                    json_location = Util.parseJson(location);
                    place = json_location.getString("name");

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FacebookError e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                // info.setText(about);
                content.setText(id + " \n" + first_name + " \n" + last_name
                        + " \n" + email + " \n" + username + " \n" + dob
                        + " \n" + gender + " \n" + place);
            }
        });

    }
.

도움이 되었습니까?

해결책

onClickListener를 확장하는 내부 클래스를 만듭니다.

private class MyOnClickListener implements OnClickListener { ... }
.

여기에서 익명의 OnClickListener에 대한 준비가 완료되면 똑같은 구현을 추가합니다.액세스 할 모든 변수가 활동 클래스의 로컬 변수로 선언되었는지 확인하십시오.

그런 다음 OnClickListener를 설정하면 다음을 수행하십시오.

hello.setOnClickListener( new MyOnCLickListener() );
.

다른 팁

라코 디스

코드를 교체하고 위의 코드를 작성하세요.

코드를 공용 / 보호 기능에 놓습니다.OnClickListener는 내부의 추상 클래스이므로 클래스에서 공용 또는 보호 된 메소드에 액세스 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top