2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
下面的代碼顯示了“在”小吃欄顯示之后的警報(bào)對(duì)話框。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content),
"This is Snackbar", Snackbar.LENGTH_INDEFINITE).
setAction(R.string.yes, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).addCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
super.onDismissed(transientBottomBar, event);
}
@Override
public void onShown(Snackbar sb) {
super.onShown(sb);
}
});
snackbar.show();
showAlertDialog(this, "Alert!!", "Alert Dialog", "Yes", "No");
}
showAlertDialog 是顯示對(duì)話框的簡單靜態(tài)方法
public static void showAlertDialog(Context context, String title, String message, String posBtnMsg, String negBtnMsg) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton(posBtnMsg, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setNegativeButton(negBtnMsg, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
上面代碼的輸出屏幕截圖如下,

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
這個(gè)問題的答案在于Snackbar.setAction(CharSequence text, final View.OnClickListener listener)實(shí)現(xiàn)方式
如果您將此方法傳遞給非空文本或非空偵聽器,則顯示操作文本的 TextView 將設(shè)置一個(gè) OnClickListener,它BaseTransientBottomBar.dispatchDismiss(BaseCallback.DISMISS_EVENT_ACTION)會(huì)在執(zhí)行操作時(shí)調(diào)用。這會(huì)導(dǎo)致 Snackbar 被關(guān)閉。
為了防止這種情況,需要檢索 Snackbar 的操作視圖的 TextView,并使用不調(diào)用 dispatchDismiss() 的偵聽器覆蓋其 OnClickListener
這是Snackbar.setAction()供參考的代碼
public Snackbar setAction(CharSequence text, final View.OnClickListener listener) {
final SnackbarContentLayout contentLayout = (SnackbarContentLayout) mView.getChildAt(0);
final TextView tv = contentLayout.getActionView();
if (TextUtils.isEmpty(text) || listener == null) {
tv.setVisibility(View.GONE);
tv.setOnClickListener(null);
} else {
tv.setVisibility(View.VISIBLE);
tv.setText(text);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onClick(view);
// Now dismiss the Snackbar
dispatchDismiss(BaseCallback.DISMISS_EVENT_ACTION);
}
});
}
return this;
}
添加回答
舉報(bào)