2011-05-04 4 views
1

이것은 어떻게 반복적으로 사용되도록 자체 클래스로 작성 될 수 있습니까? 그리고 코멘트 라인 "// Loads the List"가 어디에 있는지, 런타임에 변경할 수 있어야합니다.getExternalStorageState를 다시 사용하는 방법은 무엇입니까?

정보를 미리 기다리는 중입니다.

/** 
* -- Check to See if the SD Card is Mounted & Loads the Ordered List 
* ====================================================================== 
**/ 
private void storageState() { 
    if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED)) { 

     orderASC();// Loads the list 

    } else if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_UNMOUNTED)) { 
     Alerts.sdCardMissing(this); 
    } 
} 

개정 :

class StorageStateChecker { 
    static void storageState(Activity param, Listener l) { 
    if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED)) { 

     l.orderASC_Label();//Load the list by Label ASC 
     l.orderDSC_Label(); 
     l.orderASC_Title();//Load the list by Title ASC 
     l.orderDSC_Title(); 

    } else if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_UNMOUNTED)) { 

      // Pass context to AlertDialog.Builder 
      AlertDialog alertDialog = new AlertDialog.Builder(null).create(); 
      alertDialog.setTitle("External Storage State"); 
      alertDialog.setMessage("Your SD-Card is not mounted! If the device is plugged into a computer via the USB, please disconect the device."); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        //this.finish(); 
       } 
      }); 
      // alertDialog.setIcon(R.drawable.icon); 
      alertDialog.show(); 
    } 
    } 

public interface Listener { 
    public void orderASC_Label(); 
    public void orderDSC_Label(); 
    public void orderASC_Title(); 
    public void orderDSC_Title(); 
    } 
} 
+0

@LeffelMania/@Phil Lello Thnx 전화 코드를 사용합니다. Phil Lello의 방법을 사용하려고합니다. (이 자바에서는 안심할 수 있습니다 - Android newB). 위의 '개정 :'을 보면 올바른 생각을하고 있습니까? 또한 좀 더 자세한 예제/코드를 사용하여 Activity에서 호출을 더 확장 할 수 있습니까? 나는 아직 거기에 없다 - 내가가는대로 배우 라. 둘 다 고마워. J – CelticParser

+0

Plz 내 프로필 4 왜 내가 여기에있는 이유. Thnx. – CelticParser

+0

그러나 '새로운 AlertDialog.Builder (null) .create();'는'null'이있는 곳에서'param'을 전달해야합니다. 또한 StorageStateChecker를 Activity의 하위 클래스로 만들고 그 액티비티를 상속 받았다면 다소 모호한 설명으로 인해 정적 메서드/독립 실행 형 클래스 접근 방식을 사용했음을 언급해야합니다. –

답변

3

내가이 할 것이다 :

public static boolean performExternalStorageOperation(Runnable doIfMounted) { 
    if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED)) { 

     orderASC();// Loads the list 
     if(doIfMounted != null) { 
      doIfMounted.run(); 
     } 
     return true; 
    } else if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_UNMOUNTED)) { 
     Alerts.sdCardMissing(this); 
    } 
    return false; 
} 

당신은 (나는 때로 믿을 행동에 대한 OnClickListeners에게 많이 사용하는 일반적인 리스너 어떤 종류의 실행 가능한 대체 할 수 있습니다 ' 필연적으로 클릭해야 함) 호출하거나 호출하는 공통 메소드로 자신의 콜백 클래스를 작성하십시오. 그러나 이는 일반적인 접근 방법입니다.

+1

또한 메서드의 이름을 바꾸려면 storageState가이 이름을 혼란스럽게 만든 것처럼 들립니다. –

+0

몇 초 만에 나를 때려 눕히십시오. Runnable은이 신비가 무엇인지 알지 못하는 문제를 해결합니다. +1 –

+1

나는 @Mike dg와 절대적으로 동의한다. 이것은 그 메소드에 대한 모호한 이름이다. 이 방법이하는 일을 전혀 설명하지 않습니다. 편집에서 이름을 변경했습니다. 완벽하지는 않지만 실제로하고있는 것을 좀 더 자세히 설명합니다. – LeffelMania

1

이는 자신의 클래스에 대한 약간의 사소한 것처럼 보이지만 한 가지 방법은 다음과 같습니다

class StorageStateChecker { 
    static void storageState(XXX param, Listener l) { 
    if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED)) { 
     l.orderASC();// Loads the list 

    } else if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_UNMOUNTED)) { 
     Alerts.sdCardMissing(this); 
    } 
    } 

    public interface Listener { 
    public void orderASC(); 
    } 
} 

XXX param 요구 this 통화 Alerts.sdCardMissing(this)에 나타냅니다 무엇으로 대체합니다; Alerts는 Android SDK 클래스가 아니므로 추측 할 수만 있습니다.

그냥 입력 StorageStateChecker(param /* was 'this' */, callbackClass /* implements StorageStateChecker.Listener */);

+1

또는 LeffelMania의 [Runnable approach] (http://stackoverflow.com/questions/5889385/how-to-reuse-getexternalstoragestate/5889516#5889516)를 사용하십시오. –

+0

본인의 수정 및 의견을 참조하십시오. Q. Thnx – CelticParser

관련 문제