का उपयोग करके एक संवाद से उपयोगकर्ता इनपुट प्राप्त करना मैं Mortar + Flow के साथ अपना ऐप बना रहा हूं। मैं एक पॉपअप दिखाने का सही तरीका जानने का प्रयास कर रहा हूं जो उपयोगकर्ता से कुछ पाठ का अनुरोध करता है। मैंने इस पॉपअप क्लास को बनाया है:मोर्टार + फ्लो
public class SavedPageTitleInputPopup implements Popup<SavedPageTitleInput, Optional<String>> {
private final Context context;
private AlertDialog dialog;
public SavedPageTitleInputPopup(Context context) {
this.context = context;
}
@Override public Context getContext() {
return context;
}
@Override
public void show(final SavedPageTitleInput info, boolean withFlourish,
final PopupPresenter<SavedPageTitleInput, Optional<String>> presenter) {
if (dialog != null) throw new IllegalStateException("Already showing, can't show " + info);
final EditText input = new EditText(context);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
input.setText(info.savedPage.getName());
dialog = new AlertDialog.Builder(context).setTitle(info.title)
.setView(input)
.setMessage(info.body)
.setPositiveButton(info.confirm, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface d, int which) {
dialog = null;
final String newTitle = Strings.emptyToNull(String.valueOf(input.getText()));
presenter.onDismissed(Optional.fromNullable(newTitle));
}
})
.setNegativeButton(info.cancel, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface d, int which) {
dialog = null;
presenter.onDismissed(Optional.<String>absent());
}
})
.setCancelable(true)
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override public void onCancel(DialogInterface d) {
dialog = null;
presenter.onDismissed(Optional.<String>absent());
}
})
.show();
}
@Override public boolean isShowing() {
return dialog != null;
}
@Override public void dismiss(boolean withFlourish) {
dialog.dismiss();
dialog = null;
}
}
यह कक्षा अपेक्षा के अनुसार काम करती है। संवाद में क्या प्रदर्शित करना है यह जानने के लिए यह SavedPage
का उपयोग करता है और सही बटन दबाए जाने पर PopupPresenter#onDismissed का उपयोग करके उपयोगकर्ताओं को PopupPresenter
पर इनपुट देता है।
मेरी समस्या PopupPresenter
सबक्लास लिख रही है जो इनपुट प्रस्तुत करने और इनपुट को संसाधित करने के लिए उपयोग की जाती है। टिप्पणियाँ
new PopupPresenter<SavedPage, Optional<String>>() {
@Override protected void onPopupResult(Optional<String> result) {
if (result.isPresent()) {
// The user entered something, so update the API
// Oh wait, I don't have a reference to the SavedPage
// that was displayed in the dialog!
}
}
}
के रूप में कहते हैं, मैं SavedPage
कि संवाद में प्रदर्शित किया गया था के लिए एक संदर्भ की जरूरत नहीं है: यह है कि मैं क्या अभी है। इसे whatToShow
फ़ील्ड में PopupPresenter
में संग्रहीत किया गया था, लेकिन onPopupResult
कहलाए जाने से पहले यह फ़ील्ड ठीक हो गया है। ऐसा लगता है कि SavedPage
की एक अतिरिक्त प्रतिलिपि रखने के लिए मैं खुद को अनावश्यक रूप से दोहराना चाहूंगा।
उत्तर के लिए धन्यवाद। मैंने पहले से ही 'ConfirmerPopup' उदाहरण देखा है और इसे संशोधित किया है ताकि मेरा संवाद प्रदर्शित हो जैसा मैं चाहता हूं। जैसा कि मैंने इस प्रश्न में उल्लेख किया है, मेरी समस्या को 'पॉपअपपोर्टर' में 'व्हाट्स शो' फ़ील्ड का संदर्भ रखने के साथ करना है। मुझे नहीं लगता कि आपने इसका उत्तर दिया है। –
आपको 'व्हाट्स शो' के संदर्भ की आवश्यकता नहीं है। 'OnPopupResult' में आपको पहुंचने की क्या आवश्यकता है जिसे आप' ऑनक्लिक लिस्टनर 'में नहीं प्राप्त कर सकते हैं? – Alex
@ scompt.com अगर आप अपने प्रश्न को अपने पूर्ण 'सहेजे गए पेजटेटल इनपुटपॉप' और 'popup.xml' के साथ अपडेट करते हैं तो मैं आपको दिखाऊंगा कि मेरा क्या मतलब है। – Alex