2017-09-14 74 views
0

我想讓我的一個函數對所有綁定活動都是通用的。我想聽聽你的一些建議。在方法中形成通用對象

目前我的代碼看起來像: -

public static void stateDialog(Context context, String[] stateList, final FragmentSendAlertBinding binding) { 
    mStateDialog = new Dialog(context); 
    mStateDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    mStateDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mStateDialog.show(); 
    mStateDialog.setCancelable(false); 
    mStateDialog.setContentView(R.layout.dialog_select_state); 
    CardView cvState = (CardView) mStateDialog.findViewById(R.id.cv_state); 
    final ListView states = (ListView) mStateDialog.findViewById(R.id.countryList); 
    final TextView tvCancel = (TextView) mStateDialog.findViewById(R.id.tv_cancel); 
    final Animation myAnim = AnimationUtils.loadAnimation(context, R.anim.bounce); 
    MyBounceInterpolator interpolator = new MyBounceInterpolator(0.2, 20); 
    myAnim.setInterpolator(interpolator); 
    cvState.startAnimation(myAnim); 
    ArrayAdapter<String> itemList = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, stateList); 
    states.setAdapter(itemList); 
    states.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      binding.tvState.setText((String) arg0.getItemAtPosition(position)); 
      mStateDialog.dismiss(); 
     } 
    }); 
    tvCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mStateDialog.dismiss(); 
     } 
    }); 

} 

我可以使用類似:

public static void stateDialog(Context context, String[] stateList, final ViewDataBinding<T> binding) { 
     } 

stateDialog是我Alert類中創建了一個功能,我只是想這個功能是通用於我的所有綁定活動。我不想爲我的每個綁定活動創建單獨的功能。

,使我的這個功能可用於我所有的結合活性不只是FragmentSendAlertBinding

這可能看起來愚蠢的你,但我只是想知道,有沒有什麼辦法來實現這一目標。

感謝&問候 我從來沒有創建泛型類之前,我只是想

任何幫助將不勝感激!。

回答

1

而不是使其成爲通用的,我會建議你爲

interface StateDialogListener{ 
    public void onValueSelect(String value); 
} 
創建界面

你的方法是-l看一下

public static void stateDialog(Context context, String[] stateList, final StateDialogListener listener) { 
    mStateDialog = new Dialog(context); 
    mStateDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    mStateDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mStateDialog.show(); 
    mStateDialog.setCancelable(false); 
    mStateDialog.setContentView(R.layout.dialog_select_state); 
    CardView cvState = (CardView) mStateDialog.findViewById(R.id.cv_state); 
    final ListView states = (ListView) mStateDialog.findViewById(R.id.countryList); 
    final TextView tvCancel = (TextView) mStateDialog.findViewById(R.id.tv_cancel); 
    final Animation myAnim = AnimationUtils.loadAnimation(context, R.anim.bounce); 
    MyBounceInterpolator interpolator = new MyBounceInterpolator(0.2, 20); 
    myAnim.setInterpolator(interpolator); 
    cvState.startAnimation(myAnim); 
    ArrayAdapter<String> itemList = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, stateList); 
    states.setAdapter(itemList); 
    states.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      listener.onValueSelect((String) arg0.getItemAtPosition(position)); 
      //binding.tvState.setText((String) arg0.getItemAtPosition(position)); 
      mStateDialog.dismiss(); 
     } 
    }); 
    tvCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mStateDialog.dismiss(); 
     } 
    }); 

} 

最後隨時隨地可以調用它

stateDialog(this,<your stateList>, new StateDialogListener(){ 
    @Override 
    public void onValueSelect(String value){ 
     binding.tvState.setText(value); 
    } 
}); 
+0

我可以在接口方法中發送綁定對象嗎? – Siddharth

+0

我想你可以發送它,但我不確定它 –

0

爲綁定活動創建父類。請注意,該類應該具有您要從其子類的對象中使用的所有方法。然後創建擴展父綁定類的其他子類。

class ParentBinding{ 

    public void method1(); 

    public void method2(); 

    public void method3(); 

} 

Cusom綁定類

class BindingClass1 extends ParentBinding{ 

@override 
public void method1(){ 
    super(); 
} 

@override 
public void method1(){ 
    super(); 
} 

@override 
public void method1(){ 
    super(); 
} 

} 

然後你的方法可以寫成

public static void stateDialog(Context context, String[] stateList, final ParentBinding binding) { 
+0

你好@Nawaraj,我想你沒有得到我的觀點,請再次閱讀的問題。 – Siddharth