2017-09-14 73 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