在 Android 中的另一个 Listener 中定义 Listener
Define Listener in another Listener in Android
为什么内部侦听器(addAddress 和 cancelAddress)不工作?
一切正常,但在膨胀 viewStub 后单击侦听器不起作用。这些按钮已添加到该 viewStub 中。
private View addressStubInflated;
//...
final View fview = inflater.inflate(R.layout.fragment_address, container, false);
//...
final ViewStub addressStub = (ViewStub) fview.findViewById(R.id.address_viewStub);
final Button addAddress = (Button) fview.findViewById(R.id.add_address_button);
final Button cancelAddress = (Button) fview.findViewById(R.id.cancel_address_button);
final ViewGroup addressesParent = (ViewGroup) fview.findViewById(R.id.addresses_container);
final Button addNewAddress = (Button) fview.findViewById(R.id.add_address);
addNewAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//some codes ... OK
if (addressStub.getParent() != null) {
addressStubInflated = addressStub.inflate(); //OK
} else {
addressStubInflated.setVisibility(View.VISIBLE); //OK
}
addressStub.setOnInflateListener(new ViewStub.OnInflateListener() {
@Override
public void onInflate(ViewStub viewStub, View view) {
addAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addressStubInflated.setVisibility(View.GONE); //not work
addNewAddress.setVisibility(View.VISIBLE); //not work
addressesParent.setVisibility(View.VISIBLE); //not work
}
});
cancelAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addressStubInflated.setVisibility(View.GONE); //not work
addNewAddress.setVisibility(View.VISIBLE); //not work
addressesParent.setVisibility(View.VISIBLE); //not work
}
});
}
});
}
});
我认为这里的问题是每次单击一个按钮时,您都在一次又一次地设置 addressStub.setOnInflateListener
。
您只需要在onCreate 中设置一次inflate 监听器。然后按钮可以继续膨胀视图,当然,但至少应该触发膨胀监听器。
此外,让您的 class 实现 OnClickListener 接口可以删除 "callback hell"
为什么内部侦听器(addAddress 和 cancelAddress)不工作? 一切正常,但在膨胀 viewStub 后单击侦听器不起作用。这些按钮已添加到该 viewStub 中。
private View addressStubInflated;
//...
final View fview = inflater.inflate(R.layout.fragment_address, container, false);
//...
final ViewStub addressStub = (ViewStub) fview.findViewById(R.id.address_viewStub);
final Button addAddress = (Button) fview.findViewById(R.id.add_address_button);
final Button cancelAddress = (Button) fview.findViewById(R.id.cancel_address_button);
final ViewGroup addressesParent = (ViewGroup) fview.findViewById(R.id.addresses_container);
final Button addNewAddress = (Button) fview.findViewById(R.id.add_address);
addNewAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//some codes ... OK
if (addressStub.getParent() != null) {
addressStubInflated = addressStub.inflate(); //OK
} else {
addressStubInflated.setVisibility(View.VISIBLE); //OK
}
addressStub.setOnInflateListener(new ViewStub.OnInflateListener() {
@Override
public void onInflate(ViewStub viewStub, View view) {
addAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addressStubInflated.setVisibility(View.GONE); //not work
addNewAddress.setVisibility(View.VISIBLE); //not work
addressesParent.setVisibility(View.VISIBLE); //not work
}
});
cancelAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addressStubInflated.setVisibility(View.GONE); //not work
addNewAddress.setVisibility(View.VISIBLE); //not work
addressesParent.setVisibility(View.VISIBLE); //not work
}
});
}
});
}
});
我认为这里的问题是每次单击一个按钮时,您都在一次又一次地设置 addressStub.setOnInflateListener
。
您只需要在onCreate 中设置一次inflate 监听器。然后按钮可以继续膨胀视图,当然,但至少应该触发膨胀监听器。
此外,让您的 class 实现 OnClickListener 接口可以删除 "callback hell"