2016-09-29 83 views
0

我有一個應用程序,我必須在需要的整個應用程序中顯示SnackBar消息,爲此我創建了一個名爲「CSnackBar」的類並定義了Snackbar實現,並在需要的活動中調用此方法。我的問題是這是正確的方式,從內存的角度來看,或者我可以定義一個使用接口來代替,如果是,那麼這將如何以及什麼會影響應用程序的平滑度。對於「CSnackBar」類在類中定義方法和實現接口並在android中重寫它的方法有什麼區別?

private static CSnackBar s_m_oCSnackBar;// declare snack bar variable 

public static CSnackBar getInstance() {// creating Instance of nack bar 
    if (s_m_oCSnackBar == null) { 
     s_m_oCSnackBar = new CSnackBar(); 
    } 
    return s_m_oCSnackBar; 
} 

public void showSnackBarError(View v, String message, Context context) {// parametrised constructor 

    Snackbar snack = Snackbar.make(v, "" + message, Snackbar.LENGTH_SHORT); 
    View view = snack.getView(); 
    TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 
    tv.setTextColor(Color.WHITE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
     tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
    else 
     tv.setGravity(Gravity.CENTER_HORIZONTAL); 
    ColoredSnackbar.alert(snack).show(); 
} 

public void showSnackBarSuccess(View v, String message, Context context) { 

    Snackbar snack = Snackbar.make(v, "" + message, Snackbar.LENGTH_SHORT); 
    View view = snack.getView(); 
    TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 
    tv.setTextColor(Color.WHITE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
     tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
    else 
     tv.setGravity(Gravity.CENTER_HORIZONTAL); 
    ColoredSnackbar.confirm(snack).show(); 
} 

和我打電話的活動小吃店這樣,我需要證明小吃吧消息

代碼。

CSnackBar.getInstance().showSnackBarError(m_MainLayout, "Invalid Password", getApplicationContext()); 

回答

0

接口用於從另一個類或活動獲取回調來獲取數據。 就我所知,你正在創建一個類,並在其中創建一些方法,這樣很好。請原諒我的英語。

1

您正在爲此創建一個singletone類,這意味着您的快餐欄實例在創建後始終在內存中。另請參閱您沒有訪問方法內實例的任何屬性,所以我覺得沒有必要。 我會怎麼做,是讓showSnackBarError和showSnackBarSuccess靜態的(有位重構):

public static void showSnackBarError(View v, String message, Context context) { 
    Snackbar snack = initSnackBar(); 
    ColoredSnackbar.alert(snack).show(); 
} 

public static void showSnackBarSuccess(View v, String message, Context context) { 
    Snackbar snack = initSnackBar(); 
    ColoredSnackbar.confirm(snack).show(); 
} 

private initSnackBar(View v, String message, Context context){ 
    Snackbar snack = Snackbar.make(v, "" + message, Snackbar.LENGTH_SHORT); 
    View view = snack.getView(); 
    TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 
    tv.setTextColor(Color.WHITE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
    } else { 
     tv.setGravity(Gravity.CENTER_HORIZONTAL); 
    } 
} 

然後美其名曰爲:

CSnackBar.showSnackBarError(m_MainLayout, "Invalid Password", getApplicationContext()); 

關於定義一個接口,並與那些覆蓋它方法,如果你創建一個類,擴展小吃吧,像

interface SnackbarInterface{ 
    showSnackBarError(View v, String message, Context context); 
    showSnackBarSuccess(View v, String message, Context context) 
} 

class CSnackBar extends SnackBar implements SnackBarInterface{ 

    CSnackBar(); 

    @Override 
    showSnackBarError(View v, String message, Context context){ 
    ... 
    } 

    @Override 
    showSnackBarSuccess(View v, String message, Context context){ 
    ... 
    } 

的性差異的是,這樣一來,你是我的CR會使用它吃一個自定義小吃棒,所以你應該修改它的屬性,而不是創建一個Snackbar對象。正如我看到你使用提供的默認Snackbar,我想它不吸引你以這種方式使用它。

我在界面中看到的其他選項顯示快餐欄的方式是,您的活動擴展了實現該界面的自定義類,以便它們繼承showSnackBarError和showSnackBarSuccess。但是,我認爲最好的處理方式將是第一個。

希望我回答你的答案,而不是混淆你更多:/

+0

哪一個是內存 – Sandeep

+0

方面更好的上述兩者都將是相同的。認爲第一個更適合您的需求 –

相關問題