在方法中形成通用对象
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);
}
});
我正在尝试使我的功能之一对于我的所有绑定活动都是通用的。我想听听您对此的一些建议。
目前我的代码看起来像:-
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);
}
});