2014-12-08 3 views
-1

그래,이 문제를 해결하고 문제를 해결하는 데 최소한의 책임을 맡았습니다.안드로이드에서 두 번째 Java 클래스의 메서드 호출

두 클래스가 있습니다. 두 번째 클래스는 첫 번째 클래스를 확장하고 간단한 토스트 메시지를가집니다. 먼저 두 번째 클래스 토스트 메서드를 호출하여 첫 ​​번째 토큰 메서드를 호출하여 토스트를 표시합니다. 프로그램에 오류가보고되지 않고 컴파일됩니다. 실행하면 즉시 아무 것도 나타나지 않습니다. 두 번째 클래스의 호출을 제거하고 토스터를 첫 번째 클래스에 배치하면 토스터가 정확하다는 것을 알 수 있습니다.

일등

package com.example.testingclasses; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 

public class FirstClass extends ActionBarActivity { 

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

     SecondClass toaster = new SecondClass(); 
     toaster.toastSC(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.first_class, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

는 두 번째 클래스

package com.example.testingclasses; 

import android.content.Context; 
import android.widget.Toast; 

public class SecondClass extends FirstClass { 

    public void toastSC(){ 
     Context context = getApplicationContext(); 
      CharSequence text = "Toast from second class"; 
      int duration = Toast.LENGTH_LONG; 
      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 
    } 
} 

는 로그 고양이가 필요한 경우 알려하지만이 코드 문제입니다 확신합니다. 이것은 여기에 언급 된 사이트들과 여러 사이트들이지만 간단히 작동시킬 수는 없습니다. 아, 이렇게 단순하지만 자바로 프린트 문을 써서 실행 시켰고 모든 전화가 작동 했으므로 안드로이드에서 내가 알 수있는 한 여기에있는 것이고 나는 그것을 얻지 못하고있다.

감사합니다.

+0

1. 활동 파생 클래스 2. http://en.wikipedia.org/wiki/Method_overriding에 새 운영자를 호출하지 액티비티 클래스에서 호출 (난 정말 돈 ' 당신의 문제가 어디 있는지, 왜 SecondClass가 FirstClass를 확장하는지 알고 있습니까? OOP에 익숙합니까? 이럴 필요는 없습니다 ..) 당신은 Context를 매개 변수로 사용하여 정적 메소드로 정적 도우미 클래스를 빌드해야합니다 ... – Selvin

+0

나는 두 번째 이유는 여기에 몇 가지 답변을 보았 기 때문입니다. 그것은 도움이되지 않았지만 그것을 제거하는 것이 전체 과정을 죽였 기 때문에 나는 그것을 남겼습니다. 나는 더 이상 이것을 사용할 필요가 없으므로 계속 전진했다. 나는 이것에 관해 공부하고 있고, 내가 나의 실수를 발견했다고 생각한다. – reddragon72

답변

-1

두 번째 활동을 생성하면 안됩니다. 매니페스트에서 SecondClass를 사용하고는 SecondClass에서 인스턴스를 생성하고 다음 기능

SecondClass toaster = (SecondClass)this; 
toaster.toastSC(); 
+0

이 솔루션을 사용하지 마십시오 ... 나쁘다 ... 전혀 확장 할 필요가 없습니다. – Selvin

+0

확장 할 필요가없는 이유는 무엇입니까? 그것은 이미 Activity로 확장되어 있으며 다른 클래스에도 확장 될 수 있습니다. – Adem

+0

불필요한 업 캐스팅이 나쁜 경우 '키 ... SecondClass 인스턴스에있는 경우이를 SecondClass로 캐스트 할 필요가 없습니다. 단순히 toastSC를 호출 할 수 있습니다 ... FirstClass 인스턴스에있는 경우 내부에 있다는 보장이 없습니다 SecondClass (이 때문에 SecondClass로 변환하면 실패합니다) ... – Selvin

0

상속 나쁜 전화 this 인스턴스를 사용합니다. 왜 그냥 다음과 같이하지 않는거야?

public class SecondClass { 

    public void toastSC(Context context) { 
     CharSequence text = "Toast from second class"; 
     int duration = Toast.LENGTH_LONG; 
     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 
    } 
} 

new SecondClass().toastSC(this); 
+0

SecondClass를 만드는 것은 활동을 만드는 것을 의미합니다. 동일한 문제가 발생할 것입니다. – Adem

+0

@Adem, 당신 말이 맞아요, 제가 바라는 요점을 망쳐 놓은 어리석은 실수였습니다. 만들다. 이제 해결되었습니다. – Egor

+0

그게 효과가 있었고 나는 내 메인 프로그램에서 그것을 시도 할 것이다. 비록 아무도 이런 식으로 보여주지 않았지만 ... 여기에 나와도 다른 사람들이이 사이트에서 직접 다른 비슷한 질문에 대해 말한 것처럼 게시했습니다. 일단 내가 그것을 실행하면 내가 일하는 경우 알려 드리겠습니다. – reddragon72