2013-04-11 3 views
-1

프로그래밍과 Android를 처음 사용합니다. 돈을 계산할 수있는 작은 앱을 만들었습니다. 그 안에 많은 방법으로가는 길에 하나의 큰 파일 만 있습니다. 그래서 나는 그것을 조금 정리하고 수업에 물건을 넣을 것이라고 생각했습니다. Android에서 클래스를 올바르게 사용하는 방법

import android.widget.EditText; 
import android.widget.TextView; 

public class ClearAll extends MainActivity { 

    public void clearAll() { 
     // Set EditTexts to "" 
     ((EditText) findViewById(R.id.euro500)).setText(""); 
     ((EditText) findViewById(R.id.euro200)).setText(""); 
     ((EditText) findViewById(R.id.euro100)).setText(""); 
     ((EditText) findViewById(R.id.euro50)).setText(""); 
     ((EditText) findViewById(R.id.euro20)).setText(""); 
     ((EditText) findViewById(R.id.euro10)).setText(""); 
     ((EditText) findViewById(R.id.euro5)).setText(""); 
     ((EditText) findViewById(R.id.euro2)).setText(""); 
     ((EditText) findViewById(R.id.euro1)).setText(""); 
     ((EditText) findViewById(R.id.cent50)).setText(""); 
     ((EditText) findViewById(R.id.cent20)).setText(""); 
     ((EditText) findViewById(R.id.cent10)).setText(""); 
     ((EditText) findViewById(R.id.cent5)).setText(""); 
     ((EditText) findViewById(R.id.cent2)).setText(""); 
     ((EditText) findViewById(R.id.cent1)).setText(""); 

     // Set TextViews to "0.00" 
     ((TextView) findViewById(R.id.tvEuro500Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro200Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro100Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro50Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro20Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro10Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro5Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro2Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvEuro1Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvCent50Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvCent20Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvCent10Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvCent5Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvCent2Totaal)).setText(R.string.puntjes); 
     ((TextView) findViewById(R.id.tvCent1Totaal)).setText(R.string.puntjes); 

     ((TextView) findViewById(R.id.tvTotaalBedrag)).setText(R.string.puntjes); 
    } 
} 

그래서 내 MainActivity에서 내가 할 : 나는 내가 ClearAll 클래스에 넣어이 clearAll 방법이

ClearAll clear = new ClearAll(); 
clear.clearAll(); 

을하지만이 같이 findViewById에 NullPointerException이와 응용 프로그램의 충돌을 호출 할 때. 저는 지금 잠시 동안 수색을 해왔고 시작했을 때보 다 더 많은 질문을했습니다. setContentView()를 설정하지 않았으므로 findViewById는 기본 활동을 ouside 사용할 수없는 것으로 보입니다. 그것은 주요 활동이 아니기 때문에 제가하지 않을 것입니다. 나는 또한 간단한 토스트를 별도의 클래스에 넣고 그 것을 호출하려고 시도했지만, 충돌 할 수도있다. 그래서 나는 제대로하지 않을 것입니다.

안드로이드에서 클래스를 올바르게 사용하는 방법에 대한 조언을 해 줄 사람이 있습니까?

건배,

Daan

답변

0

이것은 안드로이드에 관한 것이 아니라 순수 자바에 관한 것입니다. 인스턴스가 함께 작동하는 방식을 이해해야합니다.

ClearAll 인스턴스에 아무 것도 없습니다.

clearAll 메소드는 작동 범위에 있어야합니다. 범위가 현재 활동이어야 함을 나타내는 findViewById를 사용합니다.

현재 활동은 ClearAll을 호출 한 MainActivity의 인스턴스입니다 (추측).

몇 가지 옵션이 있습니다 :

  1. 가 활동을 확장 ClearAll 추상 클래스를 만들 MainActivity에 clearAll를 다시 넣습니다. MainActivity를 ClearAll로 확장하십시오. MainActivity에서 이제 전화 할 수 있습니다. this.clearAll()
  2. ClearAll은 아무 것도 확장하지 않는 추상 클래스입니다. clearAll은 Activity를 매개 변수로 사용하는 정적 메서드입니다. 이 매개 변수를 사용하여 findViewById를 호출하십시오. MainActivity에서 이제 ClearAll.clearAll (this)을 호출 할 수 있습니다.

나는 옵션 1을 권장합니다. 여러 클래스에서이 메소드를 사용하려면 옵션 2와 3이 좋습니다.

또한 코드의 양을 줄이는 것과 마찬가지로 중복 된 행을 줄이기 위해 Collection (array, list ...)을 만드는 것이 좋습니다.)와 TextView에 대해 다른 하나를 사용하고이 콜렉션을 반복하여 내용을 지 웁니다. (MainActivity에서) 같은

뭔가 :

private final static int[] EDIT_IDS = new int[] {R.id.euro500, ... } 
private final static int[] TEXT_IDS = new int[] {R.id.tvEuro500Totaal, ... } 

private void clearAll() { 
    for (int id : EDIT_IDS) { 
     ((EditText) findViewById(id)).setText(""); 
    } 
    for (int id : TEXT_IDS) { 
     ((TextView) findViewById(id)).setText(R.string.puntjes); 
    } 
} 
+0

고마워요. 코드가 어떻게 생겼는지 되돌리고 다른 방법으로 실험 해 보겠습니다. clearAll 메서드에 대한 루프를 만드는 것에 대해 이미 생각하고있었습니다. 예제를 위해 큰 감사드립니다! – stofstik

0

당신은 null로 설정 텍스트를 다음()에서 onCreate에서 된 setContentView (R.layout.activity_main)가 findViewById를()에 의해 ID를 얻을 필요가있다.

레이아웃을 설정하지 않았으므로 findViewById()를 사용하여 ID를 가져올 수 없으므로 nullpointerexception이 발생합니다.

public class MainActivity extends Activity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
      clearAll(); 
      } 
     public void clearAll() { 
     // Set EditTexts to "" 
     ((EditText) findViewById(R.id.euro500)).setText(""); 
     ((EditText) findViewById(R.id.euro200)).setText(""); 

      } 

    } 
+0

그래 나는 내가 그것을했다, 그리고 그것은 잘 작동 방법이었다 알고있다. 이제 ClearAll 클래스에 넣으려고합니다. – stofstik

+0

프라그 니 (Pragnani)가 해결책을 제공해주었습니다 – Raghunandan

관련 문제