在方法中形成通用对象

Form generic objects in method

我正在尝试使我的功能之一对于我的所有绑定活动都是通用的。我想听听您对此的一些建议。

目前我的代码看起来像:-

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 Class 中创建的一个函数,我只是希望这个函数对我的所有绑定活动都是通用的。我不想为我的每个绑定创建单独的函数activity.

这样我的这个函数就可以用于我所有的绑定活动,而不仅仅是 FragmentSendAlertBinding

这对你来说可能看起来很愚蠢,但我只是想知道有什么办法可以实现这一目标。

谢谢&问候 我以前从未创建过通用 类,我只是尝试

任何帮助将不胜感激!!!

为绑定 activity 创建父级 class。请注意,class 应该具有您将要从其子 class 的对象中使用的所有方法。然后创建扩展父绑定 class 的其他子 classes。

class ParentBinding{

    public void method1();

    public void method2();

    public void method3();

}

自定义绑定class

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) {

与其将其设为通用,我建议您为其创建接口

interface StateDialogListener{
    public void onValueSelect(String value);
}

你的方法看起来

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);
     }
});